Automake:AM_CFLAGS无效

时间:2013-03-17 03:18:14

标签: unix gcc compilation autotools automake

我正在尝试在Automake中添加一些编译选项,但这些方法都不起作用。

这是我的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
  • AM_CFLAGS = ...添加到其他两个Makefile.am s
  • 将myprog _ CFLAGS = ...添加到Makefile.am(这应该在编译myprog时设置CFLAGS)

但这些都没有任何影响。我的程序(myprog)及其库(mylib)都保持编译/链接一些默认标志,类似于-DHAVE_CONFIG -g -O2

我也尝试使用INCLUDES代替AM_CFLAGS,但没有帮助。

任何人都知道这里发生了什么以及如何解决它?

2 个答案:

答案 0 :(得分:5)

  1. 看起来你正在编译C ++,在这种情况下,要使用的变量是AM_CXXFLAGS
  2. 设置AM_CXXFLAGS应位于Makefile.am中,用于声明您实际编译的内容(即bin_PROGRAMSlib_LTLIBRARIES,...)。
  3. 如果您在重复自己,请不要忘记automake支持include声明。
  4. 递归使被认为是有害的。现代automake支持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

答案 1 :(得分:-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 ...