2014-11-08 91 views
2

我想使用的autoconf/automake的工具鏈,以創建一個非常簡單的構建腳本空make文件(主要是作爲一個學習的過程。)的Autoconf/Automake的生成

大多數例子似乎表明,你需要一個將每個源目錄中的Makefile.am分開,並且項目根目錄中的Makefile.am文件應包含SUBDIRS指令,該指令告訴autoconf在哪裏查找其他Makefile。

我認爲對於一個非常簡單的項目,在項目根目錄中可能只有一個Makefile.am。但是,當我嘗試執行此操作並運行生成的configure腳本時,它將在項目根目錄中創建一個空的Makefile(0字節)。

我不確定我在做什麼錯誤。

所以,我的目錄結構非常簡單:

MyProject 
---src 
------myproject.cpp 
---Makefile.am 
---configure.ac 

configure.ac文件是最小的:

AC_INIT(myproject, 1.0) 
AC_MSG_NOTICE([My Project]) 
AC_PROG_CXX 
AC_LANG(C++) 
AC_CHECK_HEADERS(iostream) 
AC_CONFIG_SRCDIR(src/myproject.cpp) 
AM_INIT_AUTOMAKE(MyProject, 1.0) 
AC_OUTPUT(Makefile) 

而且Makefile.am也很簡單:

bin_PROGRAMS = myproject 
myproject_SOURCES = src/myproject.cpp 
myproject_CPPFLAGS = --std=c++11 

我跑:

autoconf configure.ac > configure 

當我運行configure腳本時,沒有錯誤。

然後我看到它產生在項目根目錄Makefile

# ls -lh | grep Make 
-rw-r--r-- 1 root root 0 Nov 8 16:13 Makefile 
-rw-r--r-- 1 root root 98 Nov 8 15:53 Makefile.am 
-rw-r--r-- 1 root root 0 Nov 8 15:00 Makefile.in 

而且你可以看到,它產生的Makefile文件完全是空的。

所以我顯然誤解了autoconf/automake應該如何工作的根本原因。我在這裏做錯了什麼?

+1

你運行過'automake'嗎? – reinierpost 2014-11-09 22:43:47

回答

0

我有同樣的問題 - automake會生成空的Makefiles。我不知道它爲什麼會發生,但我通過刪除autoconf生成的所有文件來修復它,例如Makefile.in(零字節Makefile.in絕對不好)。

您也可以嘗試autoreconf -if

0

這很有意思,我試圖複製你的情況和我不同,雖然預期的結果。

  • AM_INIT_AUTOMAKE調用是obsolete,你應該寫AM_INIT_AUTOMAKE([foreign])foreign告訴automake不要抱怨丟失README,ChangeLog
  • 你有你的Makefile.am在與源文件不同的文件夾。雖然是好的,新的automake應該抱怨,這是一個正向的不兼容性,我得到這個在輸出(automake的1.15):

    Makefile.am:2: warning: source file 'src/myproject.cpp' is in a subdirectory, 
    Makefile.am:2: but option 'subdir-objects' is disabled 
    automake: warning: possible forward-incompatibility. 
    automake: At least a source file is in a subdirectory, but the 'subdir-objects' 
    automake: automake option hasn't been enabled. For now, the corresponding output 
    ... 
    

    這些僅僅是警告,雖然。

  • 不管怎麼說,而不是隻運行autoconf,我已經跑了autoreconf -i(或-i -f可以肯定的---在-f選項將覆蓋所有文件,這些工具生成)。 Autoreconf以正確的順序爲您運行autoconfautomake和其他工具。

  • autoreconf完成後,我得到了一個按預期工作的配置腳本,在運行它之後,我也得到了一個正確的Makefile。