news 2026/6/26 19:28:36

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/6/25 13:01:19

OneNote页面编号与列表排序终极指南:一键优化文档结构

OneNote页面编号与列表排序终极指南:一键优化文档结构 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 在OneNote文档编辑过程中,你是否经常遇到…

作者头像 李华
网站建设 2026/6/25 23:20:20

探索多种液体混合搅拌控制系统MCGS7.7仿真程序99的奇妙世界

多种液体混合搅拌控制系统MCGS7.7仿真程序99,带曲线报警记录用户登录退出等功能在自动化控制领域,多种液体混合搅拌控制系统是一个经典且实用的项目。而借助MCGS7.7这样强大的组态软件,我们可以轻松实现对该系统的仿真,并赋予其丰…

作者头像 李华
网站建设 2026/6/25 16:31:28

人工智能之数字生命--绘画能力的生成1

轮廓编码先保留“原始尺度”的真实信息(mask/轮廓点/ROI),后续在“特征值”阶段按规则缩放生成 88n 之类的编码;同时把轮廓内的真实图像 patch(最好带 alpha/mask)保存下来,才能做子存在递归提取,以及在实时显示时做多级还原/叠加。 下面给一套“能落地”的数据结构 +…

作者头像 李华
网站建设 2026/6/25 0:42:32

人工智能之数字生命-绘画能力数据存储实例

当前场景:主世界树的一棵子树,存储所有当前可见的“存在”(物体实例) 每个存在 可以拥有 子存在(如杯子的把手、瓶子的盖子、人的手臂等部件) 子存在 被存储到 附属世界(一个独立的宇宙链子树) 该附属世界的 根链(主链)继续递归存储 子子存在 的附属世界(支持任意深…

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

笔记太乱?用 Memos+cpolar 打造高效私密笔记系统

文章目录前言1、关于Memos2、本地docker部署Memos步骤3、简单使用Memos4、介绍以及安装cpolar内网穿透5、使用cpolar内网穿透Memos6、配置固定二级子域名公网地址总结前言 Memos 是一款轻量级开源笔记工具,支持记录文字、图片,还能添加待办事项、代码块…

作者头像 李华
网站建设 2026/6/26 1:04:38

艾尔登法环FPS解锁工具:新手终极配置指南

艾尔登法环FPS解锁工具:新手终极配置指南 【免费下载链接】EldenRingFpsUnlockAndMore A small utility to remove frame rate limit, change FOV, add widescreen support and more for Elden Ring 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingFpsUnl…

作者头像 李华