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

时间:2016-12-08 13:56:18

标签: c++ c makefile cmake integration

我想知道在执行条件构建时选择要构建的常用(推荐)方法。

所以例如,有两个文件可以选择。

条件1:

class Page : QWebPage {
    public:
        string test1;
}

条件2:

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
}

1 个答案:

答案 0 :(得分:1)

您可以在.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
}