使用 CMake 获取 C 预处理器定义的值是否有一种不完全 hacky 的方法?例如,我可能想做这样的事情来获得准确的 MSVC 版本。
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
get_preprocessor_value("_MSC_FULL_VER" msvc_version)
if (msvc_version LESS 190023918)
message(FATAL_ERROR "Visual C++ 2015 Update 2 or later is required due to a bug in std::atomic.")
endif ()
target_compile_definitions(mytarget PRIVATE "_ENABLE_ATOMIC_ALIGNMENT_FIX")
endif ()
我编写了 get_preprocessor_value()
。是否有一个功能可以做到这一点,或者有一种简单的方法可以做到这一点。显然,我可以让 CMake 编译一个简单的程序来打印它,并捕获标准输出,但我想知道是否有一个内置函数可以为我做这件事。
最佳答案
没有内置的 CMake 函数可以做到这一点,CMake 也没有附带 standard module做那样的事情。
对于编译器版本的特殊情况,CMake 有变量 CMAKE_<LANG>_COMPILER_VERSION
(例如 C++ 的 CMAKE_CXX_COMPILER_VERSION
)。
如果该变量没有为您提供足够的信息,您最好的选择是使用 try_run()
正如您在问题中提到的那样,编译并打印宏的值。我一点也不觉得这有问题,我想说这实际上是在 CMake 中做类似事情的一种非常惯用的方式。
关于c++ - 使用 CMake 获取预处理器定义值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44410526/