首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

哪个cmake属性应该为导入的目标保留私有链接的共享库?

在CMake中,可以使用属性PRIVATE来为导入的目标保留私有链接的共享库。当一个目标依赖于另一个目标时,使用target_link_libraries命令将目标与共享库链接起来。在这种情况下,如果希望链接的共享库仅对当前目标可见,可以将其属性设置为PRIVATE

例如,假设我们有一个名为my_target的目标,它依赖于一个名为my_library的共享库。我们可以使用以下命令将它们链接起来,并将my_library设置为私有链接:

代码语言:cmake
复制
target_link_libraries(my_target PRIVATE my_library)

这样,my_library将仅对my_target可见,而不会传递给其他依赖于my_target的目标。

CMake中的属性还包括PUBLICINTERFACEPUBLIC属性表示链接的库将传递给依赖于当前目标的其他目标,而INTERFACE属性表示链接的库将传递给当前目标的依赖项,但不会传递给其他依赖于当前目标的目标。

总结起来,PRIVATE属性用于保留链接的共享库对当前目标的私有性,不会传递给其他目标。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Android NDK 开发】Android Studio 使用 CMake 导入静态 ( CMake 简介 | 构建脚本路径配置 | 引入静态 | 指定静态路径 | 链接动态 )

CMake 构建脚本 CMakeList.txt 设置静态路径 : # 设置上述静态导入路径 # 设置目标属性参数 : # ① 参数 1 ( add ) : 要设置哪个函数属性...导入第三方函数路径配置 ---- 导入第三方函数路径配置 : 通过调用 set_target_properties () 设置第三方路径 ; ① 参数 1 ( add ) : 要设置哪个函数属性...; ② 参数 2 ( PROPERTIES ) : 设置目标属性 ; ③ 参数 3 ( IMPORTED_LOCATION ) : 设置导入路径 ; ④ 参数 4 : 配置静态文件路径 ; # 设置上述静态导入路径...# 设置目标属性参数 : # ① 参数 1 ( add ) : 要设置哪个函数属性 # ② 参数 2 ( PROPERTIES ) : 设置目标属性...) # 设置上述静态导入路径 # 设置目标属性参数 : # ① 参数 1 ( add ) : 要设置哪个函数属性 # ② 参数 2 ( PROPERTIES

2.6K40

CMake vs Make对比

这些shell命令可以运行一个编译器来产生一个对象文件,链接器生成一个可执行文件,以便更新一个,Makeinfo格式化文档等。“Make”不仅限于构建一个包。...您还可以使用“Make”来控制安装或卸载软件包,为其生成标签表, CMake CMake代表跨平台制作。CMake识别哪个编译器用于给定类型源。...如果您不知道,您不能使用相同编译器来构建所有不同类型源。您可以在每次建立项目时手动执行,但这将是乏味和痛苦CMake为每种类型目标调用正确命令序列。...处理包含头文件,所有常见编译器/链接器标记都被平台独立和构建系统无关命令所取代。...当将CMake与Make进行比较时,使用CMake有几个优点: 跨平台发现系统。 自动发现和配置工具链。 将文件更容易地以平台方式将文件编译到共享中,并且一般比make更容易使用。

4K31

如何编译、修改和调试 dotnet runtime 仓库中 apphost nethost comhost ijwhost

.NET 以 MIT 协议开源,于是任何人都可以尝试对其进行一丢丢修改以实现一些原本很难实现功能,例如在多个可执行程序(exe)之间共享同一个私有部署 .NET 运行时。...文件夹中代码是以 CMakeList 方式管理零散 C++ 文件(和头文件),可以使用 CMake cmake-gui 工具来打开、管理和编译。...关于这个功能和用法可以参考: 在多个可执行程序(exe)之间共享同一个私有部署 .NET 运行时 - walterlv 所以,到底如何才能支持多个可执行程序共享同一个私有部署 .NET 运行时呢...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。...欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://blog.walterlv.com ),不得用于商业目的,基于本文修改后作品务必以相同许可发布。

36710

【Android NDK 开发】Android Studio 使用 CMake 导入动态 ( 构建脚本路径配置 | 指定动态查找路径 | 链接动态 )

博客资源 参考博客 : 【Android NDK 开发】Android Studio 使用 CMake 导入静态 ( CMake 简介 | 构建脚本路径配置 | 引入静态 | 指定静态路径 | 链接动态...IMPORTED) # 设置上述静态导入路径 # 设置目标属性参数 : # ① 参数 1 ( add ) : 要设置哪个函数属性 # ② 参数...2 ( PROPERTIES ) : 设置目标属性 # ③ 参数 3 ( IMPORTED_LOCATION ) : 设置导入路径 # ④ 参数 4 : 配置静态文件路径...set_target_properties( # 设置目标 add # 设置属性 PROPERTIES # 导入路径...链接函数 ---- 链接函数 : 这里注意第一个参数必须是要生成动态模块 ; # 链接函数 # 参数 1 : 本构建脚本要生成动态目标 # 参数 2 ~ ... :

9.1K20

CMake 秘籍(五)

显然,CMake 能够执行以下操作: 确定使用哪个编译器从列出源文件获取目标文件。 选择适当链接器来从这些目标文件构建(或可执行文件)。 CMake 如何确定使用哪个编译器?...与源文件一样,包含目录、编译定义和选项,当与target_link_libraries一起使用时,这些属性含义保持不变: 使用PRIVATE属性将仅被链接到当前目标,而不会被链接到以它作为依赖其他目标...使用INTERFACE属性将仅被链接到以当前目标作为依赖目标。 使用PUBLIC属性将被链接到当前目标以及任何以它作为依赖其他目标。...我们从第 3 个配方,构建和链接共享和静态,在第一章,从简单可执行文件到中已经知道,CMake 接受以下选项作为add_library第二个有效参数: STATIC,用于创建静态;即,用于链接其他目标...(如可执行文件)对象文件档案 SHARED,用于创建共享;即,可以在运行时动态链接和加载 OBJECT,用于创建对象;即,不将对象文件归档到静态中,也不将它们链接共享对象

58220

Python命名规范

内部类可以使用额外前导下划线。 函数&方法 函数名应该为小写,可以用下划线风格单词以增加可读性。如:myfunction,my_example_function。...如果一个函数参数名称和保留关键字冲突,通常使用一个后缀下划线好于使用缩写或奇怪拼写。...全局变量 对于from M import *导入语句,如果想阻止导入模块内全局变量可以使用旧有的规范,在全局变量上加一个前导下划线。...2.私有类成员使用单一下划线前缀标识,多定义公开成员,少定义私有成员。 3.变量名不应带有类型信息,因为Python是动态类型语言。...两个前导下划线:当命名一个类属性引起名称冲突时使用。 两个前导和后缀下划线:“魔”(有特殊用图)对象或者属性,例如__init__或者__file__。绝对不要创造这样名字,而只是使用它们。

2.9K11

CMake 秘籍(六)

CMAKE_INSTALL_LIBDIR:这扩展到对象代码位于子目录,即静态和共享。在 64 位系统上,这是lib64,而在 32 位系统上,它只是lib。...请咨询 CMake 在线文档:cmake.org/cmake/help/v3.6/module/GNUInstallDirs.html 目标属性和 RPATH 处理 让我们更仔细地看一下设置在共享目标属性...但是,在设置动态共享对象RPATH时应该选择哪个路径?我们需要确保无论是在构建树还是在安装树中运行可执行文件,它总是能找到正确共享。...}> $ ) 我们通过列出链接目标属性来完成共享目标。...CMake INTERFACE是构建系统中目标,但不直接创建任何构建输出。然而,由于它们是目标,我们可以在它们上面设置属性。就像“真实”目标一样,它们也可以被安装、导出和导入

27000

Android对so体积优化探索与实践

,即数组每个元素与动态符号表每个符号是一一对关系。...另一方面,当前 so 可能也需要调用其他 so 中函数(例如 libc.so 中 read、write 等),动态符号表导入符号记录了这些函数信息,在 so 内函数执行之前动态链接器会将目标函数地址填入到相应位置...链接:将输入所有目标文件以及静态(.a 文件)链接成 so 文件。 可以看出,预处理和汇编阶段对特定输入产生输出基本是固定,优化空间较小。所以我们优化方案主要是针对编译和链接阶段进行优化。...exclude libs 就是用来控制依赖静态符号是否可见,它是传递给链接参数,可以使依赖静态符号在动态符号表中不存在。...链接器会把所有输入目标文件同类型 section 进行合并,组装出最终 so 文件。

2.5K31

万字总结编译利器CMake,从入门到项目实战演练

使用要求可以更好地控制或可执行文件链接和include行,同时还可以更好地控制CMake内部目标的传递属性。...利用使用要求主要命令是: 目标编译定义 目标编译选项 目标包含目录 目标链接 让我们从第2步中重构代码,以利用现代CMake方法编写使用要求。...1.0) # 指定 C++ 标准 集(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED True) # 控制静态共享构建位置...生成器表达式可用于启用条件链接,编译时使用条件定义,条件包含目录等。条件可以基于构建配置,目标属性,平台信息或任何其他可查询信息。 生成器表达式有不同类型,包括逻辑,信息和输出表达式。...EXPORT关键字生成并安装一个CMake文件,该文件包含用于从安装树中导入install命令中列出所有目标的代码。

1.1K00

【Android 安装包优化】使用 lib7zr.a 静态处理压缩文件 ( 交叉编译 lib7zr.a 静态 | 安卓工程导入静态 | 配置 CMakeLists.txt 构建脚本 )

STATIC # 表示引入第三方静态 IMPORTED) # 设置上述静态导入路径 # 设置目标属性参数 : # ① 参数 1...( add ) : 要设置哪个函数属性 # ② 参数 2 ( PROPERTIES ) : 设置目标属性 # ③ 参数 3 ( IMPORTED_LOCATION...) : 设置导入路径 # ④ 参数 4 : 配置静态文件路径 set_target_properties( # 设置目标 7zr...# 设置属性 PROPERTIES # 导入路径 IMPORTED_LOCATION # ${CMAKE_SOURCE_DIR} 是本.../cpp/lib7zr/CPP/include_windows) # 链接函数 # 参数 1 : 本构建脚本要生成动态目标 # 参数 2 ~ ... : 后面是之前预编译动态或静态

3.1K30

CMake学习笔记(二)——CMake语法

:重新定义目标链接文件存放位置; PROJECT_NAME:返回由PROJECT指令定义项目名称; CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS:用来控制IF…ELSE…语句书写方式...我们可以通过SET指令对其进行设置最终目标二进制位置,即最终生成工程可执行文件与最终共享,而不包含编译生成中间文件。...; library1, …, libraryN:链接外部文件; 指定链接目标文件时需要链接外部,效果类似于gcc编译参数-L,解决外部依赖问题。...(2) IMPORT_PREFIX, IMPORT_PREFIX 与PREFIX, SUFFIX是等价属性,但针对是DLL导入库(即共享目标)。...(5) COMPILE_FLAGS 设置附加编译器标志,在构建目标源文件时被用到。 (6) LINKER_LANGUAGE 改变链接可执行文件或共享工具。

5.4K100

面向 C++ 现代 CMake 教程(三)

这是一个旨在作为插件在运行时加载共享版本,而不是在编译时与可执行文件链接东西。共享模块不会随着程序启动自动加载(像常规共享那样)。...然而,重要是要记住,如果你共享链接到另一个目标,比如静态或对象,你也需要在这个目标上设置这个属性。...target_link_libraries 将由find_package()找到(静态或共享添加到我们main目标链接命令中。...}) protobuf::libprotobuf导入目标隐式地指定了包含目录,并且多亏了传递依赖(或者我叫它们传播属性),它们与我们main目标共享。...为PUBLIC链接器选项添加--coverage: both GCC 和 Clang 将此解释为请求与所有依赖于sut目标链接gcov(或兼容)(由于传播属性)。

32800

面向 C++ 现代 CMake 教程(二)

和所有有效依赖关系图一样,它们都是有向无环图。这意味着有一个明确方向,即哪个目标依赖于哪个目标,并且这样依赖关系不能形成循环。...在两个源目标上,我们用INTERFACE_前缀指定了我们自定义属性。并将它们设置为相同匹配版本。两个源目标都被链接目标目标。...这些都是伪目标,或者没有包含在生成构建系统中目标导入目标 如果你浏览了目录,你知道我们将讨论 CMake 如何管理外部依赖项——其他项目、等等。...例如,你可能希望构建一个随解决方案一起分发,或者根据用户选择来导入它。 接口 这是一个有趣构造——一个不编译任何内容而是作为工具目标。...此外,我们还发现了如何确保当属性来自多个来源时,它们传播后仍然是兼容。 我们随后简要讨论了伪目标——导入目标、别名目标和接口

36300

CMake学习笔记(三)——以笔者Robosub竞赛为例

,所以加上前缀lib,后缀.so,完整文件名称应该为libcontours_fun.so SHARED:生成属性共享;此处若为STATIC则为静态 ${LIB_CONTOUR_SOURCE...后面TARGET_LINK_LIBRARIES命令便通过链接先前文件来生成目标文件,该条命令主要有几部分组成: ncclient_image:生成目标文件名称 由于先前存在指令ADD_LIBRARY...(ncclient_image SHARED ${LIB_IMAGE_SOURCE}),所以此处生成目标文件是共享文件; ${OpenCV_LIBS}:依赖文件列表 此处变量${OpenCV_LIBS.../IPCImageClient/ncclient_image_main.cpp) # 链接文件,以这些文件为基础生成目标文件 TARGET_LINK_LIBRARIES(IPCImageClient.../main.cpp) # 链接文件,以这些文件为基础生成目标文件 TARGET_LINK_LIBRARIES(IPCServer ${LIBS_SERVER}) 该部分源码原理在2.(1),

1.2K100

小白也可以玩转CMake之常用必备

这是CMake一个复杂属性,如果存在多个目标,可能需要更改一个目标的某些行为。...(${CMAKE_CURRENT_SOURCE_DIR}/*.cpp PROPERTIES COMPILE_FLAGS "-std=c++11") 可以从以下手册中查看大量属性,每个属性都可以用于满足您特定需求...最常见标志之一是-l,用于链接所需,如-lzlib、-lboost等。 还有其他附加标志,可帮助您更改可执行文件链接选项行为。...CMAKE_EXE_LINKER_FLAGS_DEBUG:在创建调试版本可执行文件时由链接器使用标志 CMAKE_STATIC_LINKER_FLAGS:在创建静态(.a、.lib)时由链接器使用标志...CMAKE_SHARED_LINKER_FLAGS:在创建共享(.so、.dll)时由链接器使用标志 CMAKE_MODULE_LINKER_FLAGS:在创建模块时由链接器使用标志 例如,您可以使用以下代码添加链接器标志

46840

面向 C++ 现代 CMake 教程(五)

在我们Calc中,对象将有助于避免为静态和共享版本重复编译源。我们只需要记住显式编译目标文件时使用POSITION_INDEPENDENT_CODE,因为这是共享一个要求。...共享与静态 我们在第六章中简要介绍了这两种,使用 CMake 链接。我们提到,总体内存使用对于使用相同共享多个程序可能更有利,并且用户可能已经拥有最流行,或者知道如何快速安装它们。...更重要是,共享以单独文件形式提供,必须安装在特定路径上,动态链接器才能找到它们,而静态作为可执行文件一部分合并。...将业务代码与共享calc_shared和 FTXUI 链接。 添加所有要在该目标上执行动作:生成构建信息、测试、程序分析和文档。...正如之前所建议保留一个文件来跟踪变更是个好主意,这样使用你项目的开发者可以轻松地找到哪个版本支持他们需要特性。例如,说库在 0.8.2 版本中增加了乘法功能可能是有用

9800

Android Studio中通过CMake使用NDK并编译自定义和添加预编译

,并且在so构建时,gradle会把该属性值传递给CMake进行构建。...src/main/cpp/native-lib.cpp 构建so源文件。 STATIC:静态,是目标文件归档文件,在链接其它目标的时候使用。...SHARED:动态,会被动态链接,在运行时被加载。 MODULE:模块,是不会被链接到其它目标插件,但是可能会在运行时使用dlopen-系列函数动态链接。...这里定义生成so文件目录 set_target_properties 命令意思是设置目标的一些属性来改变它们构建方式。...target_include_directories,它对创建设置include路径,针对目标来设置,可以避免与其他冲突,并且此时对自定义设置好了此路径后,后续导入这个就不需要再次设置了。

3.6K20
领券