CMake编译中target_link_libraries中属性PRIVATE、PUBLIC、INTERFACE含义

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

当创建动态库时,

  • 如果源文件(例如CPP)中包含第三方头文件,但是头文件(例如hpp)中不包含该第三方文件头,采用PRIVATE。
  • 如果源文件和头文件中都包含该第三方文件头,采用PUBLIC。
  • 如果头文件中包含该第三方文件头,但是源文件(例如CPP)中不包含,采用 INTERFACE

原文:CMake target_link_libraries Interface Dependencies

http://stackoverflow.com/questions/26037954/cmake-target-link-libraries-interface-dependencies

其他属性可以参考http://www.cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#transitive-usage-requirements

target_link_libraries 详解 1. cmake 3.13之后, target_link_libraries可以跟target的定义不在同一个CMakeLists.txt 里。注意:不过我还是建议将target_link_librariestarget的定义放在同一个CMakeLists.txt。2.1 来自当前工程下的add_library的target名字(包括当前工程下的和当前工程外的)2.6 debug、optimized 或 general 关键字。比如/usr/lib/libfoo.so。2.4 一个连接标志。 阅读详情

相关推荐

CMake链接依赖管理:target_link_librariesPUBLICPRIVATEINTERFACE详解

本文详细解析了CMake中`target_link_libraries`的PUBLICPRIVATEINTERFACE三种依赖管理方式,帮助开发者精确控制C/C++项目的依赖传递。通过实际案例展示了如何避免依赖污染、减少构建时间及解决符号冲突,提升项目管理效率。掌握这些技巧对于构建现代CMake项目至关重要。

weixin_30740581的博客 399

cmake语法target_link_libraries private,public,interface解读

`${PDAL_ARBITER_LIB_NAME}`:PDAL Arbitrer 库的名称。- `${PDAL_KAZHDAN_LIB_NAME}`:PDAL Kazhdan 库的名称。- `${PDAL_LAZPERF_LIB_NAME}`:PDAL Lazperf 库的名称。- `${CMAKE_DL_LIBS}`:CMake 提供的用于动态加载库文件的库文件。- `${PDAL_LEPCC_LIB_NAME}`:PDAL Lepcc 库的名称。

有问题或资源连接有缺失的可以私信公众号新潮看世界获取 1282

target_link_directories(),target_link_libraries(),target_include_directorie() 等目标链接相关的命令总结

一直很困惑 target_link_directories(),target_link_libraries(),target_include_directorie() , include_directories() ,target_sources()。所以查了资料,做了相关的实验。详细的介绍了一下它们的作用和区别。最后写了一个小案例用来测试。

目前在做 ROS相关的工作,主要是写ROS相关和C++的学习心得 3912

CMake入门教程【核心篇】链接库(target_link_libraries)

CMake链接库(target_link_libraries)

小鱼酱的博客 4357

CMaketarget_link_libraries的使用

CMaketarget_link_libraries的使用

网络资源是无限的 6万+

cmake target_link_libraries 中的PRIVATE, PUBLIC, INTERFACE 详解

网上关于 target_link_libraries 中的 PRIVATE, PUBLIC , INTERFACE 的解释大部分是错的,而且不是一般的错,是胡说。 因为这三个属性在不同的命令中使用时意义不同,有很多是从target_include_libraries中抄来的。 下面是target_link_libraries中的解释 Link Inheritance Similarly, for anytarget, in the linking stage, we would need ..

znsoft的专栏 1万+

cmake学习笔记(二)

cmake学习笔记(二) 向项目中添加一个自己的库。将编写好的库文件放入名为MathFunctions的子目录中。此目录已包含头文件MathFunctions.h和源文件mysqrt.cxx。源文件有名为mysqrt的函数,它提供域编译器sqrt类似的的功能。 将包含以下代码的CMakeLists.txt文件添加到MathFunctions目录: add_library(MathFunctions mysqrt.cxx) 在主目录下的CMakeLists.txt文件中添加以下代码: # add the M

xu_yun_huan_yue的博客 173

CMAKEPRIVATEPUBLICINTERFACE属性示例详解

闲扯 cmake 里面target_include_directories,target_link_libraries这两个命令里面有三种属性PRIVATEPUBLICINTERFACEcmake PRIVATEPUBLICINTERFACE的讲解网络上很多,但是总觉得太过偏概念了,看完并没有让人有深入细节的了解。 于是动手做个示例,就有了本杂文。 这三种属性,从根本上来讲属于cmake里面传播特性的三种等级。 实例 既然传播特性,那么我们肯定需要多个target来演示传播。 testCMake

无人等人的博客 1万+

target_link_librariestarget_include_directories参数PUBLICPRIVATEINTERFACE详解

1. 指令说明 target_include_directories():指定目标包含的头文件路径。官方文档 target_link_libraries():指定目标链接的库。官方文档 target_compile_options():指定目标的编译选项。官方文档 目标由add_library()或add_executable()生成。 这三个指令类似,这里以target_include_directories()为例进行讲解。 2. 指令讲解 测试工程目录结构: cmake...

键盘的起始页 1万+

CMake常用命令(六)link_librariestarget_link_libraries 链接库

该命令可以指定目标(exe或者so文件)需要包含的头文件路径,命名为 < target > 的命令必须是由 add _ Executive ()或 add _ library ()之类的命令创建的,并且不能是 ALIAS 目标。link_libraries用来链接静态库,target_link_libraries用来链接导入库,即按照header file + .lib + .dll方式隐式调用动态库的.lib库。在interface后面引入的库不会被链接到你的target中,只会导出符号。

qq_26849933的博客 5万+

cmaketarget_** 中的 PUBLICPRIVATEINTERFACE

CMake是一个很强大的跨平台构建系统,但是学习难度也蛮大的 1. 指令说明 target_include_directories():指定目标包含的头文件路径。官方文档 target_link_libraries():指定目标链接的库。官方文档 target_compile_options():指定目标的编译选项。官方文档 目标 由 add_library() 或 add_executable() 生成。 这三个指令类似,这里以 target_include_directories() 为例进行讲解。

织席贩履之辈 2911

link_directories, LINK_LIBRARIES, target_link_libraries使用总结

总结一下include_directories,link_directories,link_librariestarget_link_libraries的作用。尤其是后面三个参数,比较相似,容易弄混。 INCLUDE_DIRECTORIES(添加头文件目录) 它相当于g++选项中的-I参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用(这里特指c++。c和Java中用法类似)。 比如: include_directories("/opt/MATLAB/R2012a/e

qq295109601的博客 4414

CMake-scope-PRIVATE-PUBLIC-INTERFACE

这三个属性在不同命令中有不同的含义。下面的内容均来自Cmake英文官方手册。主要是翻译了三处CMake手册的介绍。 对于target_link_libraries()我认为这三个变量是用来控制库传递过程中,库所包含的依赖是否也能被连接到这个库的其他目标所包含。同时,这个手册建议,根据库的cpp以及库的h(注意不是工程)是否用到依赖,来设置这个依赖的scope范围。 对于target_include...

行走 1664

[cmake]cmake编译命令target_compile_definitions简介

编译main可执行文件时候,使用了-DDEBUG_PRINT -DINTERFACE_TEST_DEF -DPUBLIC_PRINT ,说明test库的PUBLICINTERFACE编译选项传递给了main。1、对于CMakeLists.txt,通过构建一个test库和一个可执行文件main,对test库添加3个编译选项:一个是范围为PRIVATEPRIVATE_PRINT,一个是范围为PUBLICPUBLIC_PRINT,一个范围是INTERFACEINTERFACE_TEST_DEF;

FL1768317420的博客 4410

​​现代 CMake 项目构建完全指南:从基础配置到高级技巧的目标属性管理与智能依赖传递机制解析

本文系统讲解CMake核心命令,涵盖目标创建、属性管理、依赖传递及文件收集。通过add_library、target_include_directories等命令实现模块化构建,详解PUBLIC/PRIVATE/INTERFACE关键字的依赖传递机制,并演示file(GLOB/GLOB_RECURSE)自动化文件收集技巧。

羑悻的博客. 1万+

CMake4-指令3-1:target_link_libraries(链接库)【声明链接时需要参与的依赖库(例如可执行文件或其他库)】【三种链接范围:PRIVATEPUBLICINTERFACE

注意:由于一个target中包含多个属性,一般情况下包含了头文件路径。所以使用target作为参数传入此函数时,无需调用。命名的必须是由add_executable()或add_library()之类的命令创建的。:该函数声明了链接时需要参与的依赖库名称或target。其名称可包含完整路径。再次声明添加头文件路径。

u013250861的博客 8543

[cmake]cmake编译命令target_compile_options简介

该命令添加编译选项到编译目标中,与add_compile_options不同的是,target_compile_options针对构建的目标添加编译选项,而add_compile_options是针对源文件添加预编译选项(实际上也隐含对当前构建目标添加编译选项)。总体来说,target_compile_options与add_compile_options的关系,和add_compile_definitions与target_compile_definitions的关系类似。test.h文件内容。

FL1768317420的博客 2651
上一篇: 编译器中-std和-stdlib含义
下一篇: 常量指针及指针常量区别(窍门)
Turbock
博客等级 码龄13年 194粉丝 108原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值