我有一个makefile, ImpTarget.mk
,定义如下内容,taken from this example:
%.h: %.dummy_force
@echo header= $@ xyz
%.dummy_force: ;
我把这个文件包含在MAKEFILES variable中
这是我的顶级makefile(使用MAKEFILES变量修改)
MAKEFILES = "C:\Users\User1\Desktop\A\ImpTarget.mk"
all:
$(MAKE) -C src -f makefile_gen all
$(MAKE) -C src DEBUG=TRUE -f makefile_gen all
我的目标是将先决条件列表中的所有文件 - .h,.cpp等 - 转换为目标,即执行 make --print-database
应该产生一个声明,即每个头文件也是目标 .
但是,它不起作用 .
当我查看打印出的数据库时,对于每个makefile,我看到 MAKEFILES
等于 "C:\Users\User1\Desktop\A\ImpTarget.mk"
这很好,因为这意味着它应该在 ImpTarget.mk
中读取
3.4变量MAKEFILES如果定义了环境变量MAKEFILES,则make会将其值视为要在其他makefile之前读取的其他makefile的名称列表(由空格分隔) .
但它并没有将每个文件变成目标 . 我还是得到:
# Not a target:
C:/Users/User1/Desktop/A/HMI_FORGF/qt5binaries/include/QtCore/qglobalstatic.h:
# Implicit rule search has been done.
# Last modified 2016-05-12 10:10:13
# File has been updated.
# Successfully updated.
事实上,我定义的规则甚至没有出现在输出的 --print-data-base
部分 .
我将 xyz
作为标记,以便我可以轻松地在执行的规则列表中找到它,但它不会出现在该列表中 .
Why not use include?
首先,有什么区别?给我看一个链接 .
其次,是的,这是首选的方法,但我的一些makefile自动生成一个makefile,然后在那个内部生成另一个makefile并执行它 .
所以我无法完全控制我的构建系统 .
2 回答
意义make只会考虑
MAKEFILES
,如果它是在外部定义make,无论是在shell环境本身还是通过运行make MAKEFILES=foo.mk
.MAKEFILES
vsinclude
将在下一段中解释您需要将
MAKEFILE
变量导出到环境中 . 来自6.10 Variables from the Environment自
MAKEFILES
wasn 't found in the original environment, it isn' t自动传递到环境中 . 使用: