cmake 检查 public 字段是否存在于 class
cmake check if a public field exist in class
// some_library.h
class MyLib {
public:
int field_a;
int field_b; // Only available on some versions
int field_c; // Only available on some versions
int ...;
};
我正在使用的库具有可变数量的 public 字段,具体取决于版本。
在 Cmake 中,是否可以检测库头中的某个字段是否存在?
(可能类似于CHECK_FUNCTION_EXISTS
)
您可以使用 check_symbol_exists
作为 C 符号。
文档:https://cmake.org/cmake/help/latest/module/CheckSymbolExists.html
或 check_cxx_symbol_exists
用于 CXX 符号。
文档:https://cmake.org/cmake/help/v3.18/module/CheckCXXSymbolExists.html
您可以使用 CheckStructHasMember 中的 check_struct_has_member。参见 https://cmake.org/cmake/help/latest/module/CheckStructHasMember.html
CMakeLists.txt
include(CheckStructHasMember)
Check_struct_has_member("class MyLib" field_a ${CMAKE_CURRENT_SOURCE_DIR}/MyLib.h HAS_FIELD_A LANGUAGE CXX)
// some_library.h
class MyLib {
public:
int field_a;
int field_b; // Only available on some versions
int field_c; // Only available on some versions
int ...;
};
我正在使用的库具有可变数量的 public 字段,具体取决于版本。
在 Cmake 中,是否可以检测库头中的某个字段是否存在?
(可能类似于CHECK_FUNCTION_EXISTS
)
您可以使用 check_symbol_exists
作为 C 符号。
文档:https://cmake.org/cmake/help/latest/module/CheckSymbolExists.html
或 check_cxx_symbol_exists
用于 CXX 符号。
文档:https://cmake.org/cmake/help/v3.18/module/CheckCXXSymbolExists.html
您可以使用 CheckStructHasMember 中的 check_struct_has_member。参见 https://cmake.org/cmake/help/latest/module/CheckStructHasMember.html
CMakeLists.txt
include(CheckStructHasMember)
Check_struct_has_member("class MyLib" field_a ${CMAKE_CURRENT_SOURCE_DIR}/MyLib.h HAS_FIELD_A LANGUAGE CXX)