在 Qt/C++ 中用一个代码构建两个略有不同的项目
Build two slightly different projects from one code in Qt/C++
我有一个 Qt 项目,我希望能够构建两个略有不同的可执行文件 - GUI 和 SimplifiedGUI。在第二个中,一些选项卡和按钮将被隐藏。
简化的 exe 的所有设置都将在一个 if 语句中,我需要一种方法来使这个 if 语句中的布尔表达式为 True of False 取决于我想要构建的内容。我想在不更改代码的情况下执行此操作,因为版本控制会受到影响。我想象的最简单的方法是以某种方式内置命令行参数,但我不知道该怎么做。
您有什么想法和建议吗?
您可以使用预处理器符号进行条件编译:
#include <iostream>
#ifdef SIMPLE_GUI_FLAG
constexpr bool simple = true;
#else
constexpr bool simple = false;
#endif
int main() {
if (simple) std::cout << "simple";
}
对于 gcc,您可以使用 -DSIMPLE_GUI_FLAG
调用它来定义符号 SIMPLE_GUI_FLAG
,否则不会定义它。
PS:这可能是基于意见,但我会尽量减少受预处理器影响的代码(因此上面代码中的 bool simple
)。如果你想让编译器更容易检测死路径(考虑上面例子中的 simple == false
),你可以使用 if constexpr
.
我有一个 Qt 项目,我希望能够构建两个略有不同的可执行文件 - GUI 和 SimplifiedGUI。在第二个中,一些选项卡和按钮将被隐藏。
简化的 exe 的所有设置都将在一个 if 语句中,我需要一种方法来使这个 if 语句中的布尔表达式为 True of False 取决于我想要构建的内容。我想在不更改代码的情况下执行此操作,因为版本控制会受到影响。我想象的最简单的方法是以某种方式内置命令行参数,但我不知道该怎么做。
您有什么想法和建议吗?
您可以使用预处理器符号进行条件编译:
#include <iostream>
#ifdef SIMPLE_GUI_FLAG
constexpr bool simple = true;
#else
constexpr bool simple = false;
#endif
int main() {
if (simple) std::cout << "simple";
}
对于 gcc,您可以使用 -DSIMPLE_GUI_FLAG
调用它来定义符号 SIMPLE_GUI_FLAG
,否则不会定义它。
PS:这可能是基于意见,但我会尽量减少受预处理器影响的代码(因此上面代码中的 bool simple
)。如果你想让编译器更容易检测死路径(考虑上面例子中的 simple == false
),你可以使用 if constexpr
.