1
我有下面的Makefile:Ç的Makefile - Exec和目標文件到不同的目錄
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)
我試圖才達到是在OBJ目錄下的所有* .o文件和最終的可執行文件在bin目錄。
的文件夾結構如下:
project/
src/
obj/
bin/
當我運行make我得到下面的錯誤,我不能修復: 不能創建OBJ/src目錄/ ex.o:沒有這樣的文件或目錄
顯然它的目標是錯誤的路徑。任何幫助,將不勝感激。
編輯
基礎上的第一個評論我得到了我的問題我已經清理了Makefile文件,並與下面的解決方案,沒有工作,但它創造了「SRC」子文件夾放到來到「目標文件」。我的一個錯誤是我在嘗試構建exec時使用了-c標誌。
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
恐怕你的makefile是由很多的問題一個比你更重要破正在詢問並與其完全無關。我建議你將這個問題放在一邊,直到你能夠編寫一個能夠在一個目錄中成功生成目標文件和可執行文件的makefile,並且當你有了它的時候回到你的問題。 –