繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM