我正在尝试按照http://www.microhowto.info/howto/automatically_generate_makefile_dependencies.html中描述的步骤自动生成make
的依赖项。对于源文件和目标文件都在同一目录中的简单情况,提供的方法是有效的。但是,如果我有以下文件树:
如果我使用以下makefile:
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
。
是否可以描述使用不在同一目录中的两个文件来制作隐式规则?
答案 0 :(得分:0)
可以:为$(SRC:%.c=$(BIN_DIR)/%.o)
添加规则。
建议不要 :这不常见,并且*.o
目录中也没有bin
个文件。
通常的做法是让make
在同一目录中读取和写入文件,一旦编译完所有内容,请使用单独的install
步骤将已编译的软件复制到最终位置,通常称为{ {3}}