使用CMake获取预处理器定义值

时间:2017-06-07 10:47:26

标签: c++ cmake c-preprocessor

使用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,但我想知道是否有内置函数可以为我做。

1 个答案:

答案 0 :(得分:0)

没有内置的CMake功能可以做到这一点,CMake也没有附带standard module做类似的事情。

对于编译器版本的特定情况,CMake具有变量CMAKE_<LANG>_COMPILER_VERSION(例如C ++的CMAKE_CXX_COMPILER_VERSION)。

如果该变量没有为您提供足够的信息,那么最好的办法是使用try_run()来编译&amp;正如您在问题中提到的那样打印宏的值。我根本没有发现这个hacky,我会说这实际上是在CMake中做这样的事情的非常惯用的方式。