Cygwin - Makefile-Fehler: Rezept für Ziel `Haupt.o' fehlgeschlagen
Bin ich derzeit nicht zu schreiben, ein gutes makefile und weiß nicht den Grund warum.. -.-
Dies ist mein main.c:
#include <windows.h>
#include <stdio.h>
int main(int argc, char *argv[])
{
printf("MEEEEEP");
return (0);
}
Dies ist mein makefile:
# make SYSTEM= OS= ENVIRONMENT=
# Binaries to use
ifeq ($(ENVIRONMENT),MINGW)
CXX = i686-pc-mingw32-g++
else
CXX = g++
endif
REMOVE = rm -vf
RC = windres
EXE = .exe
#############################################################
# Info
ifeq ($(CXX),g++)
INFO_CXX = g++ -dumpversion; g++ -dumpmachine
endif
#############################################################
# Flags
DEBUG = -DDEBUG -g
OPTIMIZATION = -O2 #-Winline -finline-functions
CFLAGS = -Wall -Wextra -W -static $(DEBUG) $(OPTIMIZATION) -D$(SYSTEM) -D$(OS) -D$(ENVIRONMENT) $(PRGFLAGS)
ifeq ($(SYSTEM),I686)
CFLAGS += -m32
ifeq ($(OS),WIN32)
CFLAGS += -D_WIN32
endif
ifeq ($(ENVIRONMENT),MINGW)
CFLAGS += -fexceptions
endif
endif
LFLAGS =
#############################################################
# Files
CFILES = main.c
OBJS = ${CFILES:.c=.o}
#############################################################
# Include
INCLUDES = -I.
#############################################################
# Library
LIBRARIES =
#############################################################
# Targets
.PHONY: all
all:
@echo == Standard build: make SYSTEM=I686 OS=WIN32 ENVIRONMENT=MINGW
@echo
@echo
make SYSTEM=I686 OS=WIN32 ENVIRONMENT=MINGW gyro
#############################################################
# Implicit rules and filename extensions...
.SUFFIXES: .h .o .c
.c.o: %.h
@echo Compiling $< for $(SYSTEM) $(OS) $(ENVIRONMENT) ...
@echo MEEP
$(CXX) $(CFLAGS) $(INCLUDES) -c $< -o $@
@echo MEEP2
#############################################################
# Target rules
gyro: $(OBJS)
@echo Building software for $(SYSTEM) ...
@echo
$(CXX) $(CFLAGS) $(LFLAGS) -o $@$(EXE) $(OBJS) $(LIBRARIES)
#############################################################
# Clean
.PHONY: clean
clean:
$(REMOVE) $(OBJS)
#############################################################
# Info
.PHONY: info
info:
@echo
@echo Information about C++ Compiler/Linker:
@echo
$(INFO_CXX)
Geben, wenn ich in machen gyro,
ich erhalte die Ausgabe:
Compiling main.c for Windows_NT ...
MEEP
g++ -Wall -Wextra -W -static -DDEBUG -g -O2 -D -DWindows_NT -D -I. -c main.c -o main.o
makeNew.mak:83: recipe for target `main.o' failed
make: *** [main.o] Error 1
Aber die Linie 83 ist hinter .c.o: %.h. Und ich verstehe nicht, warum.
Hat jemand eine Lösung für mich?
- 1) haben Sie versucht, die Vereinfachung dieses Makefiles? 2) Haben Sie versucht mit diesem Befehl von der Befehlszeile aus?
- Ich Tat, aber es war nicht genug. Ich habe diese von einem Kollegen, damit dieses für die serielle Schnittstelle Programmieren, haben aber keine ausreichende Erfahrung mit makefiles (ich habe gerade verwendet "make all", weil einige andere aus der makefiles). Ich normalerweise wollen ein makefile wie dieses: kompilieren alle meine c-Dateien in diesem Ordner und erstellen Sie eine ausführbare Datei namens gyro von ihm.. das ist alles was ich brauche, aber ich kann eine Pause brauchen.. es fühlt sich an wie es nicht in meinen Kopf. 🙁
- Das dauert ein paar Iterationen. Versuchen Sie diese von der Kommandozeile aus:
g++ -Wall -c main.c -o main.o
. Wenn es funktioniert, können wir aufbauen. - Hey Beta! Vielen Dank für Ihre Antwort! Weder
g++ -Wall -c main.c -o main.o
nochi686-pc-mingw32-g++ -Wall -c main.c -o main.o
funktioniert. Ich bekomme keine Antwort von der Befehlszeile aus. - Re PS: du bekommst viel bessere Reaktion, wenn Sie Fragen, verschiedene Fragen als getrennte Fragen. Obwohl ich nicht sicher bin, wie gut zu Ihnen passt, "zeigen Sie mir an, eine gute Anleitung" ist für die Stack-Exchange-Foren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sehen Sie die beiden leeren
-D
Einträge in derg++
Befehlszeile? Sie sind das problem verursacht. Sie muss Werte in der-D
Gegenstände, z.B.-DWIN32
wenn Sie hartnäckig auf etwas wie -D$(SYSTEM) -D$(UMWELT -) dann können Sie etwas wie:
in der makefile die Ihnen default-Werte.
Ihrem Ausgang sieht, fehlt das ganz wichtige Ausgabe:
nur um zu klären, was eigentlich zugeschickt bekommen, um
g++
war-D -DWindows_NT
, d.h. definiert ein Präprozessor-makro aufgerufen-DWindows_NT
; das ist natürlich kein Gültiger Bezeichner ist (ähnlich für-D -I.
)MEEP i686-pc-mingw32-g++ -Wall -Wextra -W -static -DDEBUG -O2 -DI686 -DWIN32 -DMINGW -m32 -D_WIN32 -fexceptions -I. -c main.c -o main.o Makefile:102: recipe for target
main.o' failed make[1]: *** [main.o] Fehler 1 make[1]: Leaving directory/cygdrive/c/project' Makefile:85: recipe for target
alle' fehlgeschlagen machen: *** [all] Fehler 2`i686-pc-mingw32-g++
ist nicht im Pfad. Auf meinem system, es nennt sichmingw32-g++
- diei686-pc-
prefix ist nicht vorhandenman mingw32-g++
bekam aber "kein Handbuch"-Nachricht). Gibt es eine Möglichkeit zur Vereinfachung der makefile? Was denkst du? Btw: nochmals vielen Dank für Ihre Zeit! 🙂i686-pc-
... version die richtige ist. Ich würde versuchen, Ausführung:i686-pc-mingw32-g++ -Wall -Wextra -W -static -DDEBUG -O2 -DI686 -DWIN32 -DMINGW -m32 -D_WIN32 -fexceptions -I. -c main.c -o main.o
aus einer cygwin-shell-prompt in der/cygdrive/c/projects
Verzeichnis und prüfen, was der Fehler ist in diesem Fall. Wenn Sie nicht sehen, eine Fehlermeldung und die Kompilierung fehlschlägt, dann hast du ein ernsthaftes problem für die Umwelt