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
相关产品推荐
相关产品推荐

