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

咨询CMake中target_compile_options的PRIVATE与PUBLIC区别及示例效果

CMake中target_compile_options的PRIVATE与PUBLIC作用域区别

CMake里的target_compile_options作用域本质是控制编译选项的依赖传递性,PRIVATE和PUBLIC的核心区别就在这里:

PRIVATE 作用域

用PRIVATE指定的编译选项,只影响当前目标的编译,不会传递给任何依赖它的目标。

举个例子:

target_compile_options(main PRIVATE -Wall)

这个配置只会在编译main目标的源文件时启用-Wall(开启所有警告)。假设你有另一个目标utils,通过target_link_libraries(utils PRIVATE main)依赖main,编译utils的源文件时完全不会用到-Wall选项。

PUBLIC 作用域

用PUBLIC指定的编译选项,既会作用于当前目标的编译,也会传递给所有直接依赖该目标的其他目标。

还是用-Wall举例:

target_compile_options(main PUBLIC -Wall)

效果分两部分:

  • 编译main自身的源文件时,会启用-Wall;
  • 如果有目标app通过target_link_libraries(app PRIVATE main)依赖main,那么编译app的源文件时,CMake会自动把-Wall加进去。

简单总结:

  • PRIVATE:自己用,不给别人
  • PUBLIC:自己用,也给直接依赖我的人

内容的提问来源于stack exchange,提问作者Diego De Leonardis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:53:13