4

我正在尝试在 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.ams
  • 将 myprog_ 添加CFLAGS = ...到 Makefile.am(这应该在编译 myprog 时设置 CFLAGS)

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

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

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

4

2 回答 2

6
  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。它设置运行配置测试时使用的语言。此外,AC_LANG_PUSH并且AC_LANG_POP是更聪明的方法。
  7. 你为什么要ACLOCAL_AMFLAGS这样分配?
于 2013-03-17T04:09:20.630 回答
-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 ...
于 2014-02-11T20:12:35.377 回答