当前位置:  开发笔记 > 编程语言 > 正文

Autotools:如何设置全局编译标志

如何解决《Autotools:如何设置全局编译标志》经验,为你挑选了1个好方法。

我有一个项目有几个源目录:

src/A
   /B
   /C

在每个中,Makefile.am包含

AM_CXXFLAGS = -fPIC -Wall -Wextra

如何避免在每个源文件夹中重复此操作?

我试图修改src/Makefile.am和configure.in,但没有成功.我以为我可以使用AC_PROG_CXX全局设置编译标志但是找不到关于如何使用这些宏的文档(你有指向这样的文档的指针吗?).

提前致谢



1> adl..:

你可以做几件事:

(1)一种解决方案是在你Makefile.am的所有s 上包含一个通用的makefile片段:

include $(top_srcdir)/common.mk
...
bin_PROGRAMS = foo
foo_SOURCES = ...

在那种情况下你会写

AM_CXXFLAGS = -fpic -Wall -Wextra

common.mk在未来它会更容易更宏或规则添加到所有Makefile.am只需要编辑这个文件秒.

(2)另一个解决方案是在您的全局中设置这些变量configure.ac(该名称configure.in早已被弃用),如:

...
AC_SUBST([AM_CXXFLAGS], [-fpic -Wall -Wextra])
...

然后你甚至不必在你的Makefile.ams中说什么,它们会自动继承这个全局定义.缺点是您不能轻易选择退出(第一个解决方案很容易决定不包括common.mk)并且依赖关系对第三方人员并不是非常明确(当他们阅读时他们Makefile.am没有提示标志在哪里可能来自).

(3)第三个解决方案是做orsogufo建议:覆盖用户变量CXXFLAGS in configure.ac.我建议反对它,因为它击败了GNU Build System的一个功能:允许用户在make-time 覆盖此变量.例如,您可能想要输入

make CXXFLAGS='-O0 -ggdb' 

在调试一段代码时,这将覆盖任何定义CXXFLAGS(但不包括那些定义AM_CXXFLAGS).说实话,大多数项目都没有正确支持这个,因为他们玩耍CXXFLAGS.

最后,我要提的是-fpic,-Wall-Werror不可移植的选择.根据项目的范围,您可能需要为这些添加配置检查(gnulib最近获取的新宏用于警告标志的测试,并且libtool可用于构建共享库).

推荐阅读
郑小蒜9299_941611_G
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有