【发布时间】:2021-05-11 01:13:38
【问题描述】:
在我的项目中,我在头文件config.h 中定义了一个名为ACT_STATE 的宏来编译不同的代码块。宏 ACT_STATE 可以是 ACT_DEVELOP(值 0) 或 ACT_DEPLOY(值 1),我希望名为 User 的文件夹中的源文件可以在状态 ACT_DEPLOY 下编译,并将这些源文件单独留在状态 @ 987654329@。我知道我可以在调用make 时将宏定义传递给makefile,但是通过这种方式我需要定义ACT_STATE 两次。因此,我认为是否可以让make从头文件中读取宏定义,从而可以根据头文件中的宏定义编译不同的文件?
【问题讨论】:
-
没有标准或简单的方法可以从标头中读取宏值。更常见的做法是让 make 指定值,这样标题就不必指定,或者如果 make 没有指定值,则标题指定默认值。
-
宏不需要定义两次。如果你通过 Make (
make ACT_STATE=ACT_DEPLOY) 传递它,那么没有理由在标题中定义它。 -
请记住,C 代码(尤其是某些
#included 文件)可以由程序生成。 GNU autoconf 工具可能对您有用 -
@Beta 为了进行适当的配置管理,最好不要依赖于启动构建过程的非常短暂且易变的命令行。当然,总是可以添加另一层脚本,但恕我直言,这也是不可取的。
-
@Vroomfondel:我见过配置管理系统执行的操作,例如,每天午夜扫描主分支的备份和构建。但是我从来没有见过一个构建系统可以以不依赖于命令行的方式根据命令构建某些东西。 (当然,我不计算基于 GUI 的憎恶)。如果有更好的选择,我很想学习。