news 2026/5/18 19:44: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/5/7 20:35:05

Nginx+keepalived

1 Nginx介绍 Nginx是一个高性能的HTTP和反向代理服务器。支持高达50000个并发连接数的响应。 官网:https://nginx.org/ 1.1 正向代理和反向代理 正向代理:比如要访问google,不能直接访问,只能先找翻墙软件,通过翻墙软件…

作者头像 李华
网站建设 2026/5/7 21:20:40

30分钟极速改造:让小爱音箱拥有高级AI智能的完整指南

30分钟极速改造:让小爱音箱拥有高级AI智能的完整指南 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 还在为小爱音箱的机械式回答感到…

作者头像 李华
网站建设 2026/5/15 22:42:15

人工智能之数字生命--工程实践:获取高精度轮廓等信息

先把“双目差异”变成“深度/视差”,再用深度做分割,这样“存在”就变得非常清晰。 推荐流程:双目 → 视差/深度 → 存在掩膜 → 轮廓标定 极线校正(Rectify) 没有这一步,后面的视差会非常飘,轮…

作者头像 李华
网站建设 2026/5/5 0:16:06

Zotero插件市场:让文献管理插上智能翅膀

Zotero插件市场:让文献管理插上智能翅膀 【免费下载链接】zotero-addons Zotero add-on to list and install add-ons in Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons 你是否曾经为了安装一个Zotero插件,在浏览器和软件之…

作者头像 李华
网站建设 2026/5/15 23:45:32

3分钟精通B站视频下载:downkyi完全配置手册

3分钟精通B站视频下载:downkyi完全配置手册 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等)。 …

作者头像 李华
网站建设 2026/5/16 0:35:39

Bypass Paywalls Clean:解锁付费内容的终极解决方案

在信息获取成本日益高涨的今天,你是否也曾被各大媒体的付费墙挡在门外?知名财经媒体、国际权威期刊、主流新闻机构等顶级媒体的深度内容触手可及,却因订阅费用而望而却步。现在,一款名为Bypass Paywalls Clean的浏览器扩展将彻底改…

作者头像 李华