cmake 将 clang-cl 检测为 clang

Posted

技术标签:

【中文标题】cmake 将 clang-cl 检测为 clang【英文标题】:cmake detects clang-cl as clang 【发布时间】:2018-06-14 12:39:35 【问题描述】:

我用 cmake 和 msvc 构建了boringssl 然后我尝试使用 clang-cl 构建,所以我在 vmake 参数中使用了 -T"LLVM-vs2014"

Clang-cl 使用 cl 参数,但是 cmake 使用 gcc 样式参数而不添加 -Xclang

【问题讨论】:

【参考方案1】:

处理这种情况的正确方法是检查

($CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND "x$CMAKE_CXX_SIMULATE_ID" STREQUAL "xMSVC"))

【讨论】:

为什么 x 在 $CMAKE_CXX_SIMULATE_ID 之前是必需的? 他正在使用"x$CMAKE_CXX_SIMULATE_ID"。所以如果$CMAKE_CXX_SIMULATE_ID == MSVC你需要添加x【参考方案2】:

问题就在这里:

if(CMAKE_COMPILER_IS_GNUCXX OR "$CMAKE_CXX_COMPILER_ID" STREQUAL "Clang")
  set(CMAKE_C_FLAGS "$CMAKE_C_FLAGS -Wall -Wshadow -Werror -Wno-error=shadow -Wno-error=unused-value -ggdb -std=gnu89")
  set(CMAKE_CXX_FLAGS "$CMAKE_CXX_FLAGS -Wall -Wshadow -Werror -Wno-error=shadow -Wno-error=unused-value -ggdb -std=c++0x")

我将 Clang 更改为 Clng,因此 clang-cl 未被识别为采用 gcc 样式参数的 clang.exe

【讨论】:

你能解释一下你为什么选择字符串Clng吗?这是一个特定版本的 clang 的标识符,还是一个不匹配的随机字符串?

以上是关于cmake 将 clang-cl 检测为 clang的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 NMake 样式 Makefile 的 clang-cl 无法回显

使用 Apache mod_rewrite 检测空 REQUEST_URI 的问题

将 .htaccess 转换为 nginx (mod_rewrite)

使用 clang-cl 在 Visual Studio 2019 中使用 Openmp 4/5

使用 mod_rewrite 将带有哈希字符的路径转换为查询字符串

mod_rewrite:将路径和查询字符串 URL 作为参数传递