关于 C/C++/QT 中的条件构建(宏)

Regarding conditional build (Macro) in C/C++/QT

我想知道 select 的常见(推荐)方式,当我进行 条件构建时


所以例如,有两个文件可以select编辑。

条件一:

class Page : QWebPage {
    public:
        string test1;
}

条件二:

class EnginePage : QWebEnginePage {
    public:
        string test1;
        string test2;
}

我看到的最常见的方式是使用类似于下面的 makefile 相关文件:

Makefile相关文件:

Source     += \
               one.h \
               two.h \
               three.h \
               four.h \

#if (one_defined)
    Source  += Page.h
#else
    Source  += EnginePage.h
#end


但是(这里是问题)我想知道类似的(使用一个文件而不是两个)是否可行并推荐:

单个文件(条件1+条件2):

#if (one_defined)
    class Page : QWebPage
#else 
    class EnginePage : QWebEnginePage {
#endif

    public:
        string test1;

#if (one_defined)
        string test2;
#endif
}

您可以在 .h 文件中使用 #cmakedefine CMAKE_VAR

CONFIGURE_FILE 将自动替换为 #define CMAKE_VAR/* #undef CMAKE_VAR*/ 取决于是否在 CMake 中设置 CMAKE_VAR

具体例子:

假设您有一个名为 QWebPage_Defined 的 CMake 变量,如果定义了 QWebPage,它就等于 true。

然后您必须创建一个包含以下内容的文件(例如 configure.h.in):

#cmakedefine QWebPage_Defined

在您的 CMake 脚本中,您将调用 CONFIGURE_FILE 函数:

configure_file("configure.h.in", "${CMAKE_BINARY_DIR}/configure.h")

然后在您的页眉中:

#include "configure.h" // Include the file

#ifdef QWebPage_Defined // Warning : use #ifdef and not #if
    class Page : QWebPage
#else 
    class EnginePage : QWebEnginePage {
#endif

    public:
        string test1;

#ifdef QWebPage_Defined // Warning : use #ifdef and not #if
        string test2;
#endif
}