0
// 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 ...;
};

我正在使用的库具有可变数量的公共字段,具体取决于版本。在 Cmake 中,是否可以检测库头中的某个字段是否存在?(可能类似于CHECK_FUNCTION_EXISTS

4

1 回答 1

1

您可以使用check_symbol_existsC 符号。

文档: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)
于 2020-07-22T06:47:17.937 回答