c- sub -makefile.am中的标志



我有一个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,因此您可以依靠构建系统自动识别标头依赖性,但是您可能需要执行一个干净的构建来引导。

最新更新