[英]Get preprocessor definition value using CMake
是否有使用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,但是我想知道是否有内置函数可以帮我实现。
没有内置的CMake函数可以做到这一点,CMake也没有附带标准模块来执行类似的操作。
对于特定版本的编译器,CMake具有变量CMAKE_<LANG>_COMPILER_VERSION
(例如,对于C ++,为CMAKE_CXX_COMPILER_VERSION
)。
如果该变量不能为您提供足够的信息,那么最好的选择是使用try_run()
来编译和打印宏的值,如您在问题中提到的那样。 我一点也没有发现这个问题,我想说这实际上是在CMake中做类似事情的一种惯用方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.