1
使用CMake獲取C預處理器定義的值是否有一種不完全的方法?例如,我可能想要做這樣的事情來得到確切的MSVC版本。使用CMake獲取預處理器定義值
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編譯一個打印它的簡單程序,並捕獲標準輸出,但是我想知道是否有內置函數可以幫我實現。
是的,我想到了很多。不幸的是,我找不到任何地方MSVC的CMAKE_CXX_COMPILER_VERSION值實際上是每個版本的。呃,好吧。 – Timmmm
實際上,這是一個相當簡單的[_MSC_FULL_VER'值](https://sourceforge.net/p/predef/wiki/Compilers/)翻譯的例子, 190023918對應於19.0.23918的'CMAKE_CXX_COMPILER_VERSION'。 – Timmmm