首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Makefile -对子Makefile的出口声明

Makefile -对子Makefile的出口声明
EN

Stack Overflow用户
提问于 2016-09-29 10:30:02
回答 1查看 737关注 0票数 0

我知道变量可以导出到子makefile:将变量传递给子-make

示例:

  • Makefile: 导出PWD := $(shell pwd)目标:@echo $(PWD) @cd某处;$(MAKE)
  • 某处/Makefile 目标:@echo $(PWD)

假设第一个Makefile位于/path/to/first/makefile,上面的代码将打印:

代码语言:javascript
复制
/path/to/first/makefile
/path/to/first/makefile

我的问题是:是否有一种方法让变量PWD是隐式地在子生成文件中计算?输出应该如下所示:

代码语言:javascript
复制
/path/to/first/makefile
/path/to/first/makefile/somewhere

到目前为止,我只能想到:

  • 导出文字声明并使用函数eval
  • .SECONDEXPANSION来做
  • 将声明放入一个单独的文件,并将其包含在第一个和第二个Makefile中。

所有这些解决方案都可以解释:它们意味着要将代码添加到子makefile中。我正在搜索的是一个隐式解决方案,它将只更改第一个Makefile中的代码。

另外,honestly...the前两种解决方案太难看了,我宁愿在每个子makefile中手动声明PWD。

编辑

为了更清楚地说明:变量PWD只是一个例子,我并不试图获得每个Makefile的路径。

EN

回答 1

Stack Overflow用户

发布于 2016-09-29 10:39:48

使用${MAKEFILE_LIST}变量,让您更改目录:

代码语言:javascript
复制
[max@earth:~/tmp]$ cat Makefile
target:
    @echo $(abspath $(lastword ${MAKEFILE_LIST}))
    ${MAKE} -C somewhere $@

[max@earth:~/tmp]$ cat somewhere/Makefile 
target:
    @echo $(abspath $(lastword ${MAKEFILE_LIST}))

[max@earth:~/tmp]$ make target
/home/max/tmp/Makefile
make -C somewhere target
make[1]: Entering directory '/home/max/tmp/somewhere'
/home/max/tmp/somewhere/Makefile
make[1]: Leaving directory '/home/max/tmp/somewhere'

它打印正在处理的makefile的完整路径。使用$(dir $(abspath $(lastword ${MAKEFILE_LIST})))砍掉文件名Makefile

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39767814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档