2016-09-01 110 views
0

在我configure.ac文件,我有這樣的:使用AC_CONFIG_FILES複製文件

AC_CONFIG_FILES([Makefile foo/bar.h], 
    [mkdir -p ../dir1 && cp foo/bar.h ../dir1] 
) 

的目標是:

  • 生成的Makefile從Makefile.in
  • 生成FOO/bar.h from foo/bar.h.in
  • 將foo/bar.h複製到dir1/bar.h。

雖然它的工作,我敢肯定,我做了最後一部分的錯誤。縱觀生成的輸出,我看到:

case $ac_file$ac_mode in 
    "Makefile":F) mkdir -p ../dir1 && cp foo/bar.h ../dir1 
;; 
    "foo/bar.h":F) mkdir -p ../dir1 && cp foo/bar.h ../dir1 
;; 

    esac 

所以它看起來是在做我的「的mkdir」命令一次,在這是一個有點多餘的文件列表中的每個文件。它在'case'語句中這樣做的事實表明,有一些方法可以指定特定於每個文件的命令(否則爲什麼會有'case'?)。

訣竅是什麼?

回答

0

所以事實證明,我誤解了我所看到的。

看到'case'語句讓我覺得有一些方法可以指定某些cmds應用於files參數(類似[makefile:stuff1 foo/bar.h:stuff2])的特定條目。但是(幸運的是)那不是'那種'的原因。

這裏的技巧是,在這裏case語句產生的點,我們只是走AC_CONFIG_FILES從該files條目。因此,爲了將cmds限制在AC_CONFIG_FILES條目中,它使用'case'。

儘管我早期的嘗試表明不支持使用兩個AC_CONFIG_FILES,但這也是錯誤的。

我的解決方案是使用2個AC_CONFIG_FILES。

1

如果你並不需要保存bar.h在DIR foo,我想你可以做

AC_CONFIG_FILES([Makefile bar.h:foo/bar.h.in]) 

來源:https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Configuration-Files.html#Configuration-Files

如果bar.h需要在兩個位置和鏈路是可接受的,使用

AC_CONFIG_FILES([Makefile foo/bar.h]) 
AC_CONFIG_LINKS([bar.h:foo.bar.h]) 

源:https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Configuration-Links.html#Configuration-Links

+0

雖然這些可能會起作用,但我最終採取了不同的方式。 –