gpt4 book ai didi

c - 子 Makefile.am 中的标志

转载 作者:行者123 更新时间:2023-11-30 16:37:22 25 4
gpt4 key购买 nike

我有一个 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=xAC_ARG_WITH() 宏可用于此目的。

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

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

关于c - 子 Makefile.am 中的标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47959071/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com