是否有一种通用的做法是指定一个规则,用于从具有扩展名的内容到没有扩展名的内容? (在这种情况下,'.in'到'')?Automake对于没有扩展名的目标的默认规则?
我有一个使用automake的项目。我有一些配置文件模板在安装之前需要替换。例如,我有一个'foo.ini.in'文件,我想用它来创建'foo.ini'。我有一些散布在整个代码库中的。但是,对于每一个,我需要创建一个自定义的Makefile规则来使它们工作。有没有更好的办法?我目前做这Makefile.am:
bazdir=$(libdir)/@[email protected]/baz
EXTRA_DIST = foo.ini.in bar.ini.in
CLEANFILES = foo.ini bar.ini
foo.ini: foo.ini.in
sed -e 's|@[email protected]|$(bazdir)|g' $< > [email protected]
bar.ini: bar.ini.in
sed -e 's|@[email protected]|$(bazdir)|g' $< > [email protected]
这工作得很好,但我需要复制每个文件的规则。我想写一条规则,将任何'ini.in'文件替换为'ini'文件。我试过了:
%.ini.in: %.ini
sed ....
但autoconf抱怨%模式替换是不可移植的gnumake-ism。它也不喜欢
.ini.in.ini:
sed .....
..我真的不能指责它不喜欢,因为我甚至不能解析它。
有没有办法做到这一点?
注意:我不能使用AC_CONFIG_FILES来做这个替换,因为在这种情况下'bazdir'没有完全展开。
你能解释一下为什么*'bazdir'不能完全展开?由于'$ libdir'和'$ PACKAGE_NAME'变量可以通过configure脚本来设置吗? –