是否有一種通用的做法是指定一個規則,用於從具有擴展名的內容到沒有擴展名的內容? (在這種情況下,'.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腳本來設置嗎? –