我想弄清楚为什么我不能指定一个目标作为在不同的目录中。如何在不同目录中指定makefile目标?
我想从json文件生成一些php类,但我已经将实际生成php的行更改为虚拟echo语句,所以其他人可以复制粘贴并测试它们是否感觉非常慷慨。
还有其他两件事情要添加到包含生成文件的目录:
- 称为PatientDbPath.json
- 目录中的虚拟依赖文件叫出来
如果我有一个makefile与下列:
.SUFFIXES: .php .json
.json.php:
echo "HelloMe" > PatientDbPath.php
PatientDbPath.php: PatientDbPath.json
clean:
$(RM) PatientDbPath.php
然后,一切正常,当我运行; PatientDbPath.php正确地创建,下一次我运行make,我得到的消息make: 'PatientDbPath.php' is up to date.
不过,我要生成一个单独的目录下的PHP文件,所以我在我的makefile文件更新以下内容:
.SUFFIXES: .php .json
.json.php:
echo "HelloMe" > out/PatientDbPath.php
out/PatientDbPath.php: PatientDbPath.json
clean:
$(RM) out/PatientDbPath.php
只要我这样做,即使在out目录中没有文件PatientDbPath.php,Make也会告诉我make: Nothing to be done for 'out/PatientDbPath.php'
。
所以我想也许这是后缀规则的东西,我创建了第三个makefile。
out/PatientDbPath.php: PatientDbPath.json
echo "Whatever" > out/PatientDbPath.php
clean:
rm out/PatientDbPath.php
这个效果很好,就像第一个一样。任何人都可以看到我在我的第二个makefile中做错了什么?
谢谢。
感谢您的回复,我将尝试更改我的真实makefile以使用建议的表示法。我会尽快跟进或标记答案。关于概念问题,我在这里发布的只是一个示例makefile,它显示了问题,而不是我真正的makefile。 – 2010-11-09 21:21:53
好吧,我测试了一下,你是绝对正确的,把我的makefile改成使用'out /%。php:%.json'完成了。我有一个后续问题。我是否需要为该目录中的每个.json文件创建单独的规则? – 2010-11-09 23:02:58
我找到了我想要的解决方案,基本上我需要添加下面一行:'all :: $(patsubst%.json,out /%。php,$(wildcard * .json))'这会添加一个依赖项每个php文件都要从该目录中的每个.json生成 – 2010-11-09 23:59:38