为不同目录中的文件制作隐式规则

时间:2014-02-27 15:55:33

标签: makefile dependencies

我正在尝试按照http://www.microhowto.info/howto/automatically_generate_makefile_dependencies.html中描述的步骤自动生成make的依赖项。对于源文件和目标文件都在同一目录中的简单情况,提供的方法是有效的。但是,如果我有以下文件树:

  • SRC
    • helloworld.cpp
    • 生成文件

如果我使用以下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

是否可以描述使用不在同一目录中的两个文件来制作隐式规则?

1 个答案:

答案 0 :(得分:0)

可以:为$(SRC:%.c=$(BIN_DIR)/%.o)添加规则。

建议不要 :这不常见,并且*.o目录中也没有bin个文件。

通常的做法是让make在同一目录中读取和写入文件,一旦编译完所有内容,请使用单独的install步骤将已编译的软件复制到最终位置,通常称为{ {3}}