Ich habe folgendes Makefile:C Makefile - exec und Objektdateien auf verschiedene Verzeichnisse
CC=gcc
CFLAGS=-Wall -g -Wextra -DNDEBUG $(OPTFLAGS)
VPATH=%.c src
VPATH=%.h src
VPATH=%.o obj
SOURCES=$(wildcard **/*.c *.c)
OBJECTS=$(patsubst %.c,obj/%.o,$(SOURCES))
TEST_SRC=$(wildcard tests/*_tests.c)
TESTS=$(patsubst,%.c,%o,$(TEST_SRC))
TARGET=bin/ex
$(OBJECTS):$(SOURCES)
$(CC) -c $(CFLAGS) $< -o [email protected]
# The target build
all:$(TARGET)
$(TARGET):CFLAGS+=-fPIC
$(TARGET):build $(OBJECTS)
$(CC) -c $(CFLAGS) $< -o [email protected] $(OBJECTS)
Was ich versuche zu achive alle mit * .o Dateien in obj Verzeichnis haben und die endgültige ausführbare Datei in den Papierkorb Verzeichnis.
Struktur Ordner wie folgt:
project/
src/
obj/
bin/
Wenn ich machen alle betreibe ich die folgende Fehlermeldung erhalten, die ich nicht in der Lage bin zu beheben: nicht schaffen obj/src/ex.o: No such Datei oder Verzeichnis
Offensichtlich seine Ausrichtung auf den falschen Weg. jede Hilfe würde geschätzt werden.
EDIT
Basierend auf ersten Kommentar, den ich auf meine Frage habe ich das Makefile aufgeräumt und kam mit der folgenden Lösung, die die Arbeit erledigt, außer dass es erstellt das „src“ Unterordner in " obj ". Einer meiner Fehler war, dass ich die -c-Flagge benutzte, als ich versuchte, den Exec zu bauen.
CC=gcc
CFLAGS=-Wall -g -Wextra -DNDEBUG $(OPTFLAGS)
LIBS=-ldl $(OPTLIBS)
#PREFIX?=/usr/local
SOURCESDIR=src
OBJECTSDIR=obj
SOURCES=$(wildcard **/*.c *.c)
OBJECTS=$(patsubst %.c,obj/%.o,$(SOURCES))
TEST_SRC=$(wildcard tests/*_tests.c)
TESTS=$(patsubst,%.c,%o,$(TEST_SRC))
TARGET=bin/ex
$(OBJECTS):$(SOURCES)
@$(call make-repo)
$(CC) -c $(CFLAGS) $< -o [email protected]
# The target build
all:$(TARGET) tests
dev:CFLAGS=-Wall -g -Isrc -Wextra $(OPTFLAGS)
dev:all
$(TARGET):CFLAGS+=-fPIC
$(TARGET):build $(OBJECTS)
$(CC) $(OBJECTS) $(LDFLAGS) -o [email protected]
build:
@mkdir -p bin
define make-repo
for dir in $(SOURCESDIR); \
do \
mkdir -p $(OBJECTSDIR)/$$dir; \
done
endef
Ich fürchte, Ihre Make-Datei durch Probleme gebrochen ist viel größeren als die von Ihnen fragen nach und haben nichts damit zu tun. Ich schlage vor, dass Sie dieses Problem beiseite legen, bis Sie in der Lage sind, ein Makefile zu schreiben, das erfolgreich die Objektdateien und die ausführbare Datei in einem Verzeichnis erstellt, und wenn Sie es haben, kommen Sie mit Ihrer Frage zurück. –