【问题标题】:Make, implicit rules for files in different directories为不同目录中的文件制定隐式规则
【发布时间】:2014-02-28 17:26:55
【问题描述】:

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

    • helloworld.cpp
    • 制作文件
  • bin

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

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

【问题讨论】:

  • hello_world 还是helloworld?错误信息与 Makefile 不一致。

标签: makefile dependencies


【解决方案1】:

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

不推荐:这不是常见的做法,也不是在bin 目录中拥有*.o 文件的想法。

通常的做法是让make 在同一个目录中读写文件,一旦所有内容都编译完毕,使用单独的install 步骤将编译后的软件复制到最终位置,通常称为$(DESTDIR)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    相关资源
    最近更新 更多