【发布时间】:2021-12-25 16:26:31
【问题描述】:
在 CI 机器上,我让 cmake 在开始时回显一些基本的编译器变量。将 clang 从 12 更新到 13 后,我在这里看到了两个版本:
-- CMAKE_C_COMPILER: /usr/local/bin/clang
-- CMAKE_C_COMPILER_ID: Clang
-- CMAKE_C_COMPILER_VERSION: 12.0.0
clang version 13.0.0 (/tmp/llvm-project/clang d7b669b3a30345cfcdb2fde2af6f48aa4b94845d)
-- CMAKE_CXX_COMPILER: /usr/local/bin/clang++
-- CMAKE_CXX_COMPILER_ID: Clang
-- CMAKE_CXX_COMPILER_VERSION: 12.0.0
clang version 13.0.0 (/tmp/llvm-project/clang d7b669b3a30345cfcdb2fde2af6f48aa4b94845d)
请注意,“13.0.0”来自通过这些 cmake 函数实际运行 clang --version:
message(STATUS "CMAKE_C_COMPILER: " ${CMAKE_C_COMPILER} )
message(STATUS "CMAKE_C_COMPILER_ID: ${CMAKE_C_COMPILER_ID}")
message(STATUS "CMAKE_C_COMPILER_VERSION: ${CMAKE_C_COMPILER_VERSION}")
execute_process(COMMAND ${CMAKE_C_COMPILER} ${COMPILER_VERSION_ARG} )
可能相关的其他信息:
-- CMake version: 3.18.1-g262b901
-- Using ccache.
-- Using sanitizer: address
这个问题变得相关,因为一些后来的构建步骤在检查编译器版本时失败,因此做出了错误的决定。是否有一些本地缓存可能导致这种奇怪的行为?据我了解,这不应该依赖于缓存吗?
更新:我放弃了 CMAKE_C_COMPILER_VERSION 检查并改用了 check_c_compiler_flag,请参阅下面的答案。
【问题讨论】:
-
"将 clang 从 12 更新到 13 后" - 更新 clang 后是否清除了 CMake 缓存?例如通过删除项目的构建目录。 “13.0.0 来自实际运行
clang --version” - 由于 CMake 找到/usr/local/bin/clang,我最好运行/usr/local/bin/clang -- version进行检查。 -
我澄清了关于
clang --version的部分以及为什么它是同一个可执行文件。您是说允许 CMake 缓存编译器版本并且不会注意到它何时获得重大更新?那宁愿是香蕉,不是吗?