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

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

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

【问题讨论】:

    标签: c++ cmake clang-cl


    【解决方案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 的标识符,还是一个不匹配的随机字符串?
    猜你喜欢
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多