小编ric*_*o19的帖子

如何区分clang和clang-cl?

我是 CMake 的新手,在这里遇到了一些障碍,想知道这个问题是否有“优雅”的解决方案,或者可能只是一个简单的解决方案。

例如,为了设置编译器标志,我正在执行以下操作:

target_compile_options(${PROJECT_NAME}
    PUBLIC
        $<$<CXX_COMPILER_ID:GNU>:"-some_gnu_flag">
        $<$<CXX_COMPILER_ID:Clang>:"-some_clang_flag">
        $<$<CXX_COMPILER_ID:MSVC>:"/some_msvc_flag">
)
Run Code Online (Sandbox Code Playgroud)

这完全按预期工作,除了当我尝试使用 clang-cl 作为编译器进行构建时,即:

cmake .. -G "Visual Studio 15 2017 Win64" -T "LLVM-vs2014"
Run Code Online (Sandbox Code Playgroud)

CXX ID 被报告为 Clang(毕竟它是clang)但我不想使用 Clang 标志,我实际上想使用 MSVC 标志,因为 clang-cl 旨在替代 MSVC cl -因此只接受 MSVC 样式标志。

那么有什么好的解决方案可以在不创建一些凌乱的代码的情况下解决这个问题呢?我知道我可能会做一堆 if() 检查并设置一些变量,但我试图坚持“现代 cmake”约定,因此我开始使用生成器表达式。

cmake

7
推荐指数
1
解决办法
1833
查看次数

标签 统计

cmake ×1