sub -Makefile.am中的标志

时间:2017-12-24 08:09:23

标签: c debugging makefile static-libraries autotools

我有一个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中的静态库相关),而无需每次都重新编译整个项目?

1 个答案:

答案 0 :(得分:0)

首先,修改configure.in以更改标记值非常糟糕。让configure识别传达信息的自定义参数(例如--with-debug-level=x)会更好。 AC_ARG_WITH()宏用于此目的。

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

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