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