Unix 汽车制造商:AM_CFLAGS没有效果
我试图在Automake中添加一些编译选项,但这些方法都不起作用 这是我的Unix 汽车制造商:AM_CFLAGS没有效果,unix,gcc,compilation,autotools,automake,Unix,Gcc,Compilation,Autotools,Automake,我试图在Automake中添加一些编译选项,但这些方法都不起作用 这是我的配置.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/Makefil
配置.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
(在顶级目录中):
以及每个源目录的Makefile.am
<代码>src/Makefile:
include_HEADERS = ...
lib_LIBRARIES = ...
#AM_CFLAGS = ... # doesn't work
bin_PROGRAMS = myprog #test
myprog_SOURCES = ...
myprog_LDADD = ../src/libmylib.a
#myprog_CFLAGS = ... # Doesn't work either
和测试/Makefile
:
include_HEADERS = ...
lib_LIBRARIES = ...
#AM_CFLAGS = ... # doesn't work
bin_PROGRAMS = myprog #test
myprog_SOURCES = ...
myprog_LDADD = ../src/libmylib.a
#myprog_CFLAGS = ... # Doesn't work either
我尝试取消注释所有注释行的组合,即:
- 将
添加到父AM\u CFLAGS=…
-这应该为所有受影响的源设置CFLAGSMakefile.AM
- 将
添加到其他两个AM\u CFLAGS=…
sMakefile.AM
- 将myprog添加到Makefile.am中(编译myprog时应设置CFLAGS)
myprog
)和它的库(mylib
)都被编译/链接到一些默认标志,它们类似于-DHAVE\u CONFIG-g-O2
我还尝试使用包含而不是AM\u CFLAGS
,但没有帮助
有人知道这里发生了什么,以及如何修复吗
看起来像是在编译C++,在这种情况下,使用的变量是“代码> AycxXFLACK< <代码> .<
设置AM\u cxflags
应该在Makefile.AM
中,声明您实际编译的内容(即bin\u程序
,lib\u库
,…)
如果你在重复自己的话,别忘了automake支持一个include
语句
这被认为是有害的。现代automake支持细分对象
。如果一个Makefile.am
无法控制,请使用include
语句
打开libtool的现代方式是LT_INIT
,而不是AC_PROG_libtool
AC_LANG(C++)
在configure.AC
点上不做任何事情。它设置运行配置测试时要使用的语言。此外,AC_LANG_PUSH
和AC_LANG_POP
是更聪明的方法
为什么要这样分配给ACLOCAL\u AMFLAGS
我尝试按照建议将AM\u CFLAGS
添加到父Makefile.AM,但没有成功。当我将其添加到相关的Makefile.am时,它结束了引入两个冲突的-g
选项的过程,如下所示:
libtool: link: gcc -std=gnu99 -g -O0 -g -O2 -Wl -pthread ...
禁用优化的正确方法是在需要的Makefile.am中添加CFLAGS=-g-O0
。如果由于某种原因更改未生效,请尝试删除Makefile.in和Makefile(无扩展名)
以下是正确的链接器指令:
libtool: link: gcc -std=gnu99 -g -O0 -Wl -pthread ...
谢谢顺便问一下,你说的7是什么意思,你会怎么做?我是自动工具新手,不用担心ACLOCAL\u AMFLAGS
是设置要传递给ACLOCAL
的额外标志的地方(如果有自定义宏目录,通常类似于-I m4
)。如果您没有设置ACLOCAL\u FLAGS
,那么应该根本不需要该行。“禁用优化的正确方法是将CFLAGS=-g-O0
添加到Makefile.am”,该文件发出警告:“CFLAGS”是一个用户变量,您不应该重写它;改为使用“am\u CFLAGS”