pet*_*ohn 24 automake autoconf makefile
我想知道如何设置默认的编译器/链接器/等.标志,如果我使用Autoconf/Automake组合.
例如,如果我没有设置任何内容,则默认编译器标志为"-O2 -g".我可以用其他东西覆盖它,例如,如果我想调试:
./configure 'CXXFLAGS=-O0 -g'
Run Code Online (Sandbox Code Playgroud)
但我发现默认配置很愚蠢,因为如果我启用优化,调试将变得不可能.所以默认标志应该是"-O2"或"-O0 -g",如果我configure没有参数运行.我该怎么做?
编辑:我尝试了以下解决方案:
progname_CXXFLAGS=whateverMakefile.am.它不起作用,因为它将标志添加到默认标志而不是替换它们.CXXFLAGS=whateverconfigure.ac.这有效,但后来我无法覆盖它.mal*_*984 19
根据autoconf手册(约AC_PROG_CC):
如果使用GNU C编译器,请将shell变量GCC设置为"yes".如果尚未设置输出变量CFLAGS,则将其设置为GNU C编译器的-g -O2(在GCC不接受-g的系统上为-O2),或者为其他编译器设置-g.如果您的包不喜欢此默认值,则可以插入该行
: ${CFLAGS=""}在AC_INIT之后和AC_PROG_CC之前选择一个空的默认值.
同样,根据autoconf手册(约AC_PROG_CXX):
如果使用GNU C++编译器,请将shell变量GXX设置为"yes".如果尚未设置输出变量CXXFLAGS,则将其设置为GNU C++编译器的-g -O2(在G ++不接受-g的系统上为-O2),或者为其他编译器设置-g.如果您的包不喜欢此默认值,则可以插入该行
: ${CXXFLAGS=""}在AC_INIT之后和AC_PROG_CXX之前选择一个空的默认值.
如果您只想在运行configure时为自己设置默认标志,则有(至少)3种好方法可以执行此操作.在您的环境中设置CXXFLAGS(例如在.login或.bashrc中),使用CONFIG_SITE环境变量指定配置文件,或在$ prefix/share/config.site中设置CXXFLAGS所需的值.如果要为包的所有用户将默认标志设置为"-O2 -g"以外的其他标志,则需要更改所需内容,因为这样做会违反最少意外的主体.任何熟悉autoconf的人都希望默认标志为-O2 -g,你不应该改变它.
使用上面给出的第3个选项,然后就可以了
$ echo 'CXXFLAGS="-O0 -g"' > /usr/local/share/config.site
(或重定向到通常设置$前缀的位置,例如$ HOME/share/config.site)作为额外的奖励,这将为您配置的所有自动混合项目设置CXXFLAGS ,而不仅仅是您自己的.(假设您正确设置了前缀.如果您希望config.site对所有项目都有效,而不考虑前缀,那么使用CONFIG_SITE设置)
与此同时,我想出了如何做到这一点.我会对此作出解释.
基本的是Autoconf替换Makefile.in中的shell变量.问题是如何获得这些变量的值?答案是初始化命令替换在命令行(如./configure 'CXXFLAGS=-O0 -g')告诉它们的变量,否则它们被任何定义默认值的命令(例如,CXXFLAGS设置为AC_PROG_CXX)替换,如果它们不为空.所以解决方案是AC_PROG_CXX在命令行替换之前设置我们的新默认值.例如:
if test -z $CXXFLAGS; then
CXXFLAGS='-O2'
fi
AC_PROG_CXX
Run Code Online (Sandbox Code Playgroud)