我有一个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.in
重新生成configure
,我在其中修改dmydebug(3)在顶级运行./configure
(4)运行make
只有这种方式才能实现。是否有更好的方法来修改DMYDEBUG
(仅与folder-1
中的静态库有关),而无需每次重新编译整个项目?
首先,修改configure.in
以更改标志值是可怕的。使configure
识别传达信息的自定义参数(例如--with-debug-level=x
)会更好。AC_ARG_WITH()
宏可实现此目的。
但是,如果您必须重新配置项目(重新运行的./configure
,或者首先不重建它)以更改标志,则更改标志将始终需要进行完整的重建。要获得更狭窄的重建,您需要依靠make
检测标志修改并重建受影响的目标。
make
仅识别文件级依赖项,因此该策略依赖于将宏定义放在标题文件中,该文件使用它的文件#include
。由于您正在使用Automake,因此您可以依靠构建系统自动识别标头依赖性,但是您可能需要执行一个干净的构建来引导。