在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
之类的短划线会抑制有关未找到文件的错误。此外,禁用隐式规则不是一个选项。
谢谢!
答案 0 :(得分:0)
根据评论,我现在运行make with debugging。我发现Make正在对include(file)
中包含的所有文件进行正常/预期评估。包含文件的隐式规则是尝试重建它们(如果它们不存在)。由于这不是我想要的,我使用以下空显式规则来覆盖行为,并且不对我所包含的所有文件执行任何操作。这在我的案例中很简单,因为它们都共享.mak
扩展名。这是规则:
%.mak : ;
感谢那些添加了反馈的人。