C++ 使用CMake获取预处理器定义值
有没有一种不太老练的方法可以使用CMake获取C预处理器定义的值?例如,我可能想做这样的事情,以获得确切的MSVC版本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
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编译器版本。