使用CMake获取C预处理器定义的值是不是完全没有办法?例如,我可能想要做这样的事情来获得确切的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编译一个打印它的简单程序,并捕获stdout,但我想知道是否有内置函数可以为我做。
答案 0 :(得分:0)
没有内置的CMake功能可以做到这一点,CMake也没有附带standard module做类似的事情。
对于编译器版本的特定情况,CMake具有变量CMAKE_<LANG>_COMPILER_VERSION
(例如C ++的CMAKE_CXX_COMPILER_VERSION
)。
如果该变量没有为您提供足够的信息,那么最好的办法是使用try_run()
来编译&amp;正如您在问题中提到的那样打印宏的值。我根本没有发现这个hacky,我会说这实际上是在CMake中做这样的事情的非常惯用的方式。