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
- 这应该为所有受影响的源设置CFLAGSAM_CFLAGS = ...
另外两个Makefile.am
小号CFLAGS = ...
到Makefile.am(这应该在编译myprog时设置CFLAGS)但这些都没有任何影响.我的program(myprog
)和它的库(mylib
)都保持编译/链接一些默认标志,就像这样-DHAVE_CONFIG -g -O2
.
我也尝试使用INCLUDES
而不是AM_CFLAGS
,但没有帮助.
任何人都知道这里发生了什么以及如何解决它?
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
?