【发布时间】:2010-03-08 18:58:48
【问题描述】:
我需要获取一些外部数据以在 Makefile 中形成输出文件名。
在 GNU Make 中我可以这样做:
NAME=$(shell some_commands)
$(NAME).out: file.in
compile "$<" -o "$@"
其他一些规则有$(NAME).out 作为先决条件,所以我需要$(NAME).out 作为目标。我不能在这里使用替换+引号,因为这不是由 shell 解释的。
我从 BSD Make 手册页中看到,在 Mac OS X 上我应该能够做这样的事情(虽然我还不能测试它):
NAME!=some_commands
$(NAME).out: file.in
compile "$<" -o "$@"
有没有一种技巧可以以便携的方式做这种事情?
我不想生成 Makefile 并使构建过程混乱。我虽然是包含,但它们在 Make 版本中也有不同的语法。
【问题讨论】:
-
这是一个很好的问题,但我认为我从未见过这样做过。简单地坚持使用 GNU make 是很常见的。
-
在 OS X 10.6.2 上:
make --version返回GNU Make 3.81和built for i386-apple-darwin10.0。 -
哦,我记得默认情况下在 Tiger 上安装了 BSD Make。但我认为如果可能的话,我仍然会保持它的便携性,有一个类似于 Pavel 方法 3 的解决方法。