You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake如何为不同语言的依赖目标设置不同INTERFACE编译选项

CMake多语言目标分语言指定编译选项的方法

你可以配合CMake内置的编译语言生成器表达式实现该需求,生成器表达式会在构建阶段自动识别当前编译源文件的语言,仅对匹配的语言生效对应编译选项,无需拆分目标即可兼容多语言依赖场景。

具体写法示例如下:

target_compile_options(foo INTERFACE
  # 仅C语言生效的编译选项
  $<$<COMPILE_LANGUAGE:C>:-fstrict-aliasing>
  # 仅C++语言生效的编译选项
  $<$<COMPILE_LANGUAGE:CXX>:-fno-exceptions>
  # 仅CUDA语言生效的编译选项
  $<$<COMPILE_LANGUAGE:CUDA>:--gpu-architecture=sm_75>
)

额外注意事项:

  • 如果需要给多个语言配置相同的选项,可以用IN_LIST逻辑组合生成器表达式,例如同时给C和C++添加选项的写法:
    $<$<IN_LIST:$<COMPILE_LANGUAGE>,C;CXX>:-Wall -Wextra>
    
  • 项目顶层的project()指令需要提前声明所有用到的编译语言,例如使用CUDA时要写成project(你的项目名 C CXX CUDA),否则CMake无法识别对应语言的生成器表达式规则。
  • 该语法最低兼容CMake 3.3版本,完全覆盖v3.20及以上的版本要求。

内容的提问来源于stack exchange,提问作者einpoklum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 05:45:01