假设我的整个存储库依赖于编译时常量:
// consts.h
constexpr int MAGIC_CONST = 10;
然后我可以在我的主要功能中使用它:
// main.cpp
int main(int argc, char** argv) {
// use MAGIC_CONST to do something:
double data[MAGIC_CONST];
}
现在,假设我想编译这个 main 的几个“实例”:
main_1.cpp
,main_2.cpp
,...,每个都有不同的 MAGIC_CONST
。我该怎么做呢?因为 MAGIC_CONST
是在标头中定义的,并且对于整个代码库而不是每个二进制文件都是唯一的。
我也(笨拙地)尝试过像这样使用 extern const :
// consts.h
extern const int MAGIC_CONST; // declaration only
然后在每个main中定义它的实际值:
// main_0.cpp
extern const int MAGIC_CONST = 10;
int main(int argc, char** argv) {
double data[MAGIC_CONST];
}
这也不起作用,因为
extern const
不是编译时常量。
我也考虑过旧式
#define
,但实际上我也需要在代码库的其他地方使用我的 MAGIC_CONST
,而不仅仅是在 main_0.cpp
中。
任何帮助表示赞赏!
编译时使用
-D
怎么样?
#include <stdio.h>
int main() {
printf("%d\n", MAGIC_CONST);
return 0;
}
结果:
PS F:\OtherApps\Program\VsCode\Code> g++ main.cpp -D MAGIC_CONST=1 -o main_1.exe
PS F:\OtherApps\Program\VsCode\Code> ./main_1.exe
1
PS F:\OtherApps\Program\VsCode\Code> g++ main.cpp -D MAGIC_CONST=2 -o main_2.exe
PS F:\OtherApps\Program\VsCode\Code> ./main_2.exe
2
PS F:\OtherApps\Program\VsCode\Code>
您还可以编写脚本或
.bat
来编译不同的可执行二进制文件