我有一个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
中的静态库相关),而无需每次都重新编译整个项目?
首先,你修改你的configure.in
来改变标志值是很糟糕的。让configure
识别传达信息的自定义参数,例如--with-debug-level=x
会好得多。 AC_ARG_WITH()
宏用于此目的。
但是,如果必须重新配置项目(重新运行./configure
,无论是否首先重建它)来更改标志,那么更改标志将始终需要完全重建。对于更窄范围的重建,您需要依靠make
检测标志修改并重新构建受影响的目标。
make
只识别文件级依赖项,因此策略依赖于您将宏定义放在头文件中,使用它的文件是#include
。由于您使用的是Automake,因此您可以依靠构建系统自动识别标头依赖关系,但您可能需要执行一个干净的构建来引导它。