什么Makefile规则将.c附加到缺少的包含?

时间:2018-05-07 20:06:53

标签: gcc makefile gnu-make

在makefile中,有一个声明:

include $(PROJECT_CUSTOM_DIR)/project_custom.mak

在某些情况下,此文件将不存在。在这些情况下,我们得到的错误是"没有这样的文件或目录"。但是,看起来隐式规则(或其他)会附加扩展名.c,然后扩展.c,然后匹配我们用于编译.o.c文件的标准规则之一,并尝试编译它。

PROJECT_CUSTOM_DIR := . include $(PROJECT_CUSTOM_DIR)/project_custom.mak C_EXT ?= c CXX_EXT ?= cpp OBJ_EXT ?= o %.$(OBJ_EXT) : $(C_SRCS) $(COMPILE_C_COMMAND) 文件的默认规则如下:

Makefile:10: project_custom.mak: No such file or directory
gcc -c -fvisibility=hidden -O3 -flto -mtune=generic project_custom.mak.c -o project_custom.mak.o

日志中的错误如下:

-include file.mak

我已经阅读了很多,试图确定这里发生的事情并且很难过。谁能解释这种行为?

另外,我知道添加诸如this之类的短划线会抑制有关未找到文件的错误。此外,禁用隐式规则不是一个选项。

谢谢!

1 个答案:

答案 0 :(得分:0)

根据评论,我现在运行make with debugging。我发现Make正在对include(file)中包含的所有文件进行正常/预期评估。包含文件的隐式规则是尝试重建它们(如果它们不存在)。由于这不是我想要的,我使用以下空显式规则来覆盖行为,并且不对我所包含的所有文件执行任何操作。这在我的案例中很简单,因为它们都共享.mak扩展名。这是规则:

%.mak : ;

感谢那些添加了反馈的人。