关于 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
}
我想知道 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
}