sub -Makefile.am中的标志

问题描述 投票:0回答:1

我有一个C项目,具有以下结构,1个目标(二元最终产品)

main.c
configure.in
configure
Makefile.am
Makefile.in
folder-1
..Makefile.am
..Makefile.in
..<static library files .c files>
..<static library files .h files>
folder-2
<some .c files>
<some .h files>
...
...

我知道如何使用Autotools配置和编译我的项目。关于我的folder-1库:我经常通过定义一个名为DMYDEBUG的标志来更改该库中具有不同调试级别的文件。

整个项目的编译时间需要一段时间,到现在为止,我可以通过(1)修改顶级configure.in文件来更改标志:

CCONFIGFLAGS="${CCONFIGFLAGS} -DSF_BIGENDIAN -DMYDEBUG=3"

(2)运行make clean(3)从编辑的configure再生configure.in,我修改DMYDEBUG(3)运行./configure在顶级(4)运行make

只有这样,希望的效果才会发生。是否有更好的方法来修改DMYDEBUG(仅与folder-1中的静态库相关),而无需每次都重新编译整个项目?

c debugging makefile static-libraries autotools
1个回答
0
投票

首先,你修改你的configure.in来改变标志值是很糟糕的。让configure识别传达信息的自定义参数,例如--with-debug-level=x会好得多。 AC_ARG_WITH()宏用于此目的。

但是,如果必须重新配置项目(重新运行./configure,无论是否首先重建它)来更改标志,那么更改标志将始终需要完全重建。对于更窄范围的重建,您需要依靠make检测标志修改并重新构建受影响的目标。

make只识别文件级依赖项,因此策略依赖于您将宏定义放在头文件中,使用它的文件是#include。由于您使用的是Automake,因此您可以依靠构建系统自动识别标头依赖关系,但您可能需要执行一个干净的构建来引导它。

© www.soinside.com 2019 - 2024. All rights reserved.