我想知道在执行条件构建时选择要构建的常用(推荐)方法。
所以例如,有两个文件可以选择。
条件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
}
答案 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
}