我正在尝试在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 CFLAGS = ...
添加到Makefile.am(这应该在编译myprog时设置CFLAGS)但这些都没有任何影响。我的程序(myprog
)及其库(mylib
)都保持编译/链接一些默认标志,类似于-DHAVE_CONFIG -g -O2
。
我也尝试使用INCLUDES
代替AM_CFLAGS
,但没有帮助。
任何人都知道这里发生了什么以及如何解决它?
答案 0 :(得分:5)
AM_CXXFLAGS
。AM_CXXFLAGS
应位于Makefile.am
中,用于声明您实际编译的内容(即bin_PROGRAMS
,lib_LTLIBRARIES
,...)。include
声明。subdir-objects
。如果一个Makefile.am
失控,请使用include
语句。LT_INIT
,而不是AC_PROG_LIBTOOL
。AC_LANG(C++)
在configure.ac
点没有做任何事情。它设置运行configure测试时要使用的语言。此外,AC_LANG_PUSH
和AC_LANG_POP
是更明智的方法。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 ...