Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用CMake获取预处理器定义值_C++_Cmake_C Preprocessor - Fatal编程技术网

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

C++ 使用CMake获取预处理器定义值,c++,cmake,c-preprocessor,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

有没有一种不太老练的方法可以使用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\u预处理器\u value()
。有没有一个函数可以做到这一点,或者有一种简单的方法可以做到这一点。显然,我可以让CMake编译一个简单的程序来打印它,并捕获stdout,但我想知道是否有一个内置函数可以为我完成这项工作。

没有内置的CMake函数可以完成这项工作,CMake也没有附带类似的功能

对于编译器版本的特定情况,CMake有一个变量(例如C++的
CMake\u CXX\u compiler\u version


如果该变量不能为您提供足够的信息,您最好使用它来编译和打印宏的值,正如您在问题中提到的。我一点也不觉得这有什么不妥,我想说,在CMake中,这实际上是一种非常惯用的处理类似事情的方式。

是的,我也这么认为。不幸的是,我在任何地方都找不到MSVC的CMAKE_CXX_编译器_版本在每个版本中的实际值。啊,好吧。实际上,这是一个相当简单的翻译,例如190023918对应于19.0.23918的
CMAKE\u CXX\u编译器版本。