news 2026/4/16 12:13:47

CMake: target_link_libraries() 函数可见性说明符PUBLIC,PRIVATE,INTERFACE

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CMake: target_link_libraries() 函数可见性说明符PUBLIC,PRIVATE,INTERFACE

文章目录

      • 1. 含义说明
      • 2. 示例
        • dep/CMakeLists.txt
        • mylib/CMakeLists.txt(关键部分)

在 CMake 中,target_link_libraries()函数用于指定目标(如可执行文件或库)的链接依赖。其中可以使用PUBLICPRIVATEINTERFACE三种可见性说明符(visibility specifiers),它们主要在构建库(library)目标时影响依赖的传递行为。下面分别说明其含义,并辅以示例。


1. 含义说明

假设你有一个库MyLib,它依赖于另一个库DepLib,而你的可执行程序MyApp又链接了MyLib。此时:

  • PRIVATE DepLib
    表示DepLib仅在MyLib内部使用,调用者(如MyApp不需要知道也不应依赖DepLibDepLib不会传递给链接MyLib的目标。

  • PUBLIC DepLib
    表示DepLib既是MyLib的依赖,也是其接口的一部分。调用者(如MyApp)在链接MyLib会自动继承对DepLib的依赖(包括头文件路径、编译定义等,如果DepLib是通过target_include_directories等设置的)。

  • INTERFACE DepLib
    表示DepLib不是MyLib自己需要的,而是提供给使用者的MyLib本身不链接DepLib,但任何链接MyLib的目标都会继承这个依赖。通常用于头文件库(header-only library)

注意:这些说明符只对库目标(STATIC/SHARED/OBJECT/INTERFACE)有意义。对于可执行文件(executable),PUBLICINTERFACE行为类似于PRIVATE(因为可执行文件没有“使用者”)。


2. 示例

假设有如下项目结构:

project/ ├── CMakeLists.txt ├── mylib/ │ ├── CMakeLists.txt │ ├── include/mylib.h │ └── src/mylib.cpp ├── dep/ │ ├── CMakeLists.txt │ ├── include/dep.h │ └── src/dep.cpp └── app/ ├── CMakeList.txt └── main.cpp
dep/CMakeLists.txt
add_library(dep src/dep.cpp) target_include_directories(dep PUBLIC include)
mylib/CMakeLists.txt(关键部分)
add_library(mylib src/mylib.cpp) target_include_directories(mylib PUBLIC include) # 情况1:PRIVATE target_link_libraries(mylib PRIVATE dep) # 情况2:PUBLIC # target_link_libraries(mylib PUBLIC dep) # 情况3:INTERFACE(此时 mylib 可能是 header-only) # add_library(mylib INTERFACE) # target_link_libraries(mylib INTERFACE dep)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/30 7:31:16

工业智能网关如何实现超出阈值自动上报故障

某汽车零部件制造工厂的自动化产线上,一台关键设备——数控加工中心的温度传感器持续监测主轴运行温度。某日凌晨,因冷却系统故障导致主轴温度异常攀升至85℃(正常阈值为70℃),但现场值班人员未及时察觉。由于未及时停…

作者头像 李华
网站建设 2026/4/8 3:20:59

NCM格式转换神器:3分钟解锁网易云音乐全攻略

NCM格式转换神器:3分钟解锁网易云音乐全攻略 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐的NCM格式文件发愁吗?🎵 这些只能在特定播放器上播放的音频文件,现在有了…

作者头像 李华
网站建设 2026/4/9 4:02:31

消费补贴新模式探秘:让花的钱还能“赚”回来

在当下激烈的市场竞争中,“价格战”如同一个漩涡,让商家利润持续承压,也让消费者在无尽的选择中愈发审慎。如何跳出这一零和博弈,构建一个良性循环的新商业生态,已成为数字经济时代的重要命题。在这一背景下&#xff0…

作者头像 李华
网站建设 2026/3/26 11:35:36

数字化赋能新路径:家家有平台助力商家智慧升级

在数字化浪潮席卷各行各业的今天,实体商家如何低成本、高效率地实现转型升级,成为摆在众多经营者面前的重要课题。家家有(海南)数字科技有限公司推出的"绿色积分异业联盟"模式,为商家提供了一条切实可行的数…

作者头像 李华
网站建设 2026/4/14 3:23:33

谜语生成器:LobeChat出题考考你的朋友

谜语生成器:LobeChat出题考考你的朋友 在某个周末的家庭聚会上,你灵机一动想给朋友们来点新鲜的互动——不是手机刷屏,而是玩一场AI出题、人类猜谜的游戏。打开浏览器,启动一个简洁优雅的聊天界面,点击“谜语大师”角色…

作者头像 李华
网站建设 2026/4/11 10:48:27

鸣潮自动化工具终极配置指南

鸣潮自动化工具终极配置指南 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 还在为每日重复的游戏任务感到疲惫&#xff1…

作者头像 李华