Makefile 为不同目录中的文件创建隐式规则
我正试图按照中描述的步骤,使用Makefile 为不同目录中的文件创建隐式规则,makefile,dependencies,Makefile,Dependencies,我正试图按照中描述的步骤,使用make自动生成依赖项。对于源文件和对象文件都位于同一目录中的简单情况,提供的方法是有效的。但是,如果我有以下文件树: src helloworld.cpp 生成文件 垃圾箱 如果我使用以下生成文件: CPPFLAGS += -MD -MP BIN_DIR=../bin SRC = $(wildcard *.c) hello_world: $(SRC:%.c=$(BIN_DIR)/%.o) $(LD) -o $@ $^ -include $(S
make
自动生成依赖项。对于源文件和对象文件都位于同一目录中的简单情况,提供的方法是有效的。但是,如果我有以下文件树:
- src
- helloworld.cpp
- 生成文件
- 垃圾箱
CPPFLAGS += -MD -MP
BIN_DIR=../bin
SRC = $(wildcard *.c)
hello_world: $(SRC:%.c=$(BIN_DIR)/%.o)
$(LD) -o $@ $^
-include $(SRC:%.c=$(BIN_DIR)/%.d)
然后我得到这个错误消息:
make: *** No rule to make target `../bin/helloworld.o', needed by `hello_world'. Stop.
并且没有生成.d文件
据我所知,当试图应用隐式规则来生成。/bin/helloworld.o
时,问题就出现了,因为相应的源文件是helloworld.cpp
,而不是。/bin/helloworld.cpp
是否可以描述使用不在同一目录中的两个文件创建隐式规则?可以:为
$(SRC:%.c=$(BIN_DIR)/%.o)添加规则
不建议这样做:这不是常见的做法,在bin
目录中包含*.o
文件也不是一个好主意
通常的做法是让make
读取和写入同一目录中的文件,一旦所有内容都编译好,使用单独的install
步骤将编译后的软件复制到最终位置,通常称为。是hello_world
还是helloworld
?错误消息与生成文件不一致。