Automake:AM_CFLAGS无效

eol*_*old 3 unix automake gcc compilation autotools

我试图在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
Run Code Online (Sandbox Code Playgroud)

我有父母Makefile.am(在顶级目录):

#AM_CFLAGS = ... # doesn't work
AUTOMAKE_OPTIONS = subdir-objects
ACLOCAL_AMFLAGS = ${ACLOCAL_FLAGS}
SUBDIRS = src test
dist_noinst_SCRIPTS = autogen.sh
Run Code Online (Sandbox Code Playgroud)

Makefile.am每个源目录; src/Makefile:

include_HEADERS = ...
lib_LIBRARIES = ...
Run Code Online (Sandbox Code Playgroud)

并且test/Makefile:

#AM_CFLAGS = ... # doesn't work
bin_PROGRAMS = myprog #test
myprog_SOURCES = ...
myprog_LDADD = ../src/libmylib.a
#myprog_CFLAGS = ... # Doesn't work either
Run Code Online (Sandbox Code Playgroud)

我尝试取消注释评论行的所有组合,即:

  • 添加AM_CFLAGS = ...到父级Makefile.am- 这应该为所有受影响的源设置CFLAGS
  • 加上AM_CFLAGS = ...另外两个Makefile.am小号
  • 将myprog_添加CFLAGS = ...到Makefile.am(这应该在编译myprog时设置CFLAGS)

但这些都没有任何影响.我的program(myprog)和它的库(mylib)都保持编译/链接一些默认标志,就像这样-DHAVE_CONFIG -g -O2.

我也尝试使用INCLUDES而不是AM_CFLAGS,但没有帮助.

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

Jac*_*lly 5

  1. 看起来你正在编译C++,在这种情况下,要使用的变量是AM_CXXFLAGS.
  2. 设置AM_CXXFLAGS应在Makefile.am声明内容时,你实际编制(即bin_PROGRAMS,lib_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