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)