首页 文章

GNU make - $(MAKEFILES)中的makefile中的规则未被读取/确认

提问于
浏览
0

我有一个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 回答

  • 1

    如果定义了环境变量MAKEFILES

    意义make只会考虑 MAKEFILES ,如果它是在外部定义make,无论是在shell环境本身还是通过运行 make MAKEFILES=foo.mk .

    MAKEFILES vs include 将在下一段中解释

    MAKEFILES的主要用途是在make的递归调用之间进行通信

  • 1

    您需要将 MAKEFILE 变量导出到环境中 . 来自6.10 Variables from the Environment

    当make运行配方时,makefile中定义的变量将放入每个shell的环境中 . 这允许您将值传递给子进行调用(请参阅make的递归使用) . 默认情况下,只有来自环境或命令行的变量才会传递给递归调用 . 您可以使用export指令传递其他变量 . 有关完整详细信息,请参阅将变量传递给子制作 .

    MAKEFILES wasn 't found in the original environment, it isn' t自动传递到环境中 . 使用:

    export MAKEFILES = "C:\Users\User1\Desktop\A\ImpTarget.mk"
    

相关问题