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,并且当你有了它的时候回到你的问题。 –