2013-03-17 134 views
3

我試圖在Automake的添加一些編譯選項,但沒有辦法的工作。的Automake:AM_CFLAGS沒有效果

這裏是我的configure.ac

AC_INIT(...) 
AC_PREREQ([2.59]) 
AC_CONFIG_AUX_DIR([build-aux]) 
AM_INIT_AUTOMAKE([1.10 foreign -Wall no-define]) 
AC_PROG_CXX 
AC_PROG_LIBTOOL 
AC_CONFIG_HEADERS([config.h]) 
AC_CONFIG_FILES([Makefile src/Makefile test/Makefile]) 
AC_LANG(C++) 
AC_OUTPUT 

而且我父Makefile.am(在頂級目錄):

#AM_CFLAGS = ... # doesn't work 
AUTOMAKE_OPTIONS = subdir-objects 
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS} 
SUBDIRS = src test 
dist_noinst_SCRIPTS = autogen.sh 

併爲每個源代碼目錄一個Makefile.am; src/Makefile

include_HEADERS = ... 
lib_LIBRARIES = ... 

test/Makefile

#AM_CFLAGS = ... # doesn't work 
bin_PROGRAMS = myprog #test 
myprog_SOURCES = ... 
myprog_LDADD = ../src/libmylib.a 
#myprog_CFLAGS = ... # Doesn't work either 

我試圖在取消註釋行的所有組合,即:

  • 添加AM_CFLAGS = ...Makefile.am - 這應該設置CFLAGS所有受影響的來源
  • add AM_CFLAGS = ... t Ø另外兩個Makefile.am小號
  • 添加myprog_ CFLAGS = ...到Makefile.am(這應該編譯MYPROG時設置CFLAGS)

但這些都不具有任何影響。我的程序(myprog)和它的程序庫(mylib)都被編譯/鏈接了一些類似-DHAVE_CONFIG -g -O2的默認標誌。

我也嘗試過使用INCLUDES代替AM_CFLAGS,但並沒有幫助。

任何人有一些想法是怎麼怎麼回事,如何解決?

回答

5
  1. 看起來你正在編譯C++,在這種情況下,要使用的變量是AM_CXXFLAGS
  2. 設置AM_CXXFLAGS應該在Makefile.am中聲明您實際正在編譯的內容(即,bin_PROGRAMS,lib_LTLIBRARIES,...)。
  3. 如果你重複自己,不要忘記的automake支持一個include聲明。
  4. 遞歸使其被認爲是有害的。現代汽車製造商支持subdir-objects。如果一個Makefile.am失控,請使用include聲明。
  5. 打開的libtool的現代途LT_INIT,不AC_PROG_LIBTOOL
  6. AC_LANG(C++)不會在configure.ac點做任何事情。它設置運行configure測試時使用的語言。此外,AC_LANG_PUSHAC_LANG_POP是更智能的方法。
  7. 你爲什麼要這樣分配到ACLOCAL_AMFLAGS
+0

感謝。順便說一句,你的意思是7.,你會怎麼做?我是autotools的新手。 – eold 2013-03-17 18:22:41

+0

不用擔心。 'ACLOCAL_AMFLAGS'是你設置額外標誌以傳遞給'aclocal'的地方(通常是'-I m4',如果你有一個自定義宏目錄的話)。如果你不設置'ACLOCAL_FLAGS',根本就不需要這條線。 – 2013-03-17 20:55:26

-1

我嘗試將AM_CFLAGS添加到父項Makefile.am,建議不起作用。當我把它添加到相關的Makefile.am,它結束了引入兩個相互矛盾的-g選項,如下圖所示:

libtool: link: gcc -std=gnu99 -g -O0 -g -O2 -Wl -pthread ... 

禁用優化的正確方法是增加CFLAGS = -g -O0到需要的地方的Makefile.am。嘗試刪除Makefile.in和Makefile(無擴展名),如果更改由於某種原因不生效。

這裏是正確的鏈接器指令:

libtool: link: gcc -std=gnu99 -g -O0 -Wl -pthread ... 
+1

「*禁用優化的正確方法是將'CFLAGS = -g -O0'添加到Makefile.am *」這會給出警告:''CFLAGS'是一個用戶變量,您不應該覆蓋它;使用'AM_CFLAGS '改爲「 – Geremia 2016-02-16 04:29:51