CMake中的关键字PUBLIC,INTERFACE, PRIVATE 与C++语言中类继承时使用的public、private的作用非常相似。结合VSCode编写具体代码来演示这几个关键字的实际用途。 1、代码结构 CMakeLists.txt cmake_minimum_required(VERSION 3.5) project(App) add_library(libA STATIC libA/libA.cpp) target_include_directories(libA ...
Similarly, for anytarget, in the linking stage, we would need to decide, given theitemto be linked, whether we have to put theitemin the link dependencies, or the link interface, or both, in the compiledtarget. Here the link dependencies means theitemhas some implementations that thetarget...
讲一个例子说明 PUBLIC | INTERFACE | PRIVATE。 我平常开发是使用vscode作为代码编辑器,如下图编写好的目录结构: 推荐在vscode下安装CMake相关插件,会更方便开发,插件如下: 安装完插件后会在vscode侧边栏显示图标,如下: 在编写完CMake后,点击配置按钮: 输出窗口可以看到执行的命令与输出信息: 同时插件也生产了项目...
CX509PublicKey Interface Reference Feedback Definition Namespace: Microsoft.Hpc.Scheduler.Store Assembly: Microsoft.Hpc.Scheduler.Store.dll C# Copy [System.Runtime.InteropServices.Guid("728AB30B-217D-11DA-B2A4-000E7BBB2B09")] public interface CX509PublicKey : Microsoft.Hpc.Scheduler.Store.I...
最近看了很多项目的代码,代码是用cmake编译的,由于各种库之间链接关系错综复杂,加上PRIVATE,PUBLIC,INTERFACE属性值,我在添加代码的时候总会遇到稀奇古怪的编译的问题,网上看了很多文章,写的都不是很靠谱,正好看到一个b站视频讲的不错,解决了我很多疑惑,我又有了新的疑惑,折腾了一晚上终于把这个搞明白了,分享给大家...
PUBLIC - 既被添加到目标(库)的包含路径中,同时添加到了链接这个库的其他目标(库或者可执行程序)的包含路径中 简单来说,不考虑文件大小,重复引用,全部用PUBLIC就完事了。 add_library命令如果没有可添加的执行文件,只能用INTERFACE来修饰 add_library
最近看了很多项目的代码,代码是用cmake编译的,由于各种库之间链接关系错综复杂,加上PRIVATE,PUBLIC,INTERFACE属性值,我在添加代码的时候总会遇到稀奇古怪的编译的问题,网上看了很多文章,写的都不是很靠谱,正好看到一个b站视频讲的不错,解决了我很多疑惑,我又有了新的疑惑,折腾了一晚上终于把这个搞明白了,分享给大家...
但除了这些基本命令,CMake还提供了三个关键字:PUBLIC, PRIVATE, 和 INTERFACE,用于更细致地控制这些依赖关系的作用域和可见性。 PUBLIC 当我们将一个目标A链接到另一个目标B,并指定PUBLIC关键字时,意味着目标B可以直接使用目标A中的公共符号(如函数和变量)。此外,任何链接到目标B的其他目标也可以访问这些符号。换...
INTERFACE作用是在编译ibhello.so的时候,不使用这些参数,但是在编译需要链接libhello.so的目标(应用程序或者库)时,编译指令中加入这些参数。换句话说就是把这些参数传给这个库的使用者。 PUBLIC是INTERFACE 和 PRIVATE的两种功能的合并。也就是编译当前目标使用这个参数,编译这个目标的使用者时,也使用这个参数。
实验结果展示了使用PRIVATE、INTERFACE和PUBLIC链接选项时编译命令的差异,以及生成的libbar.so和app文件在链接关系上的表现。通过实验,可以发现,CMake在生成编译命令时,会应用库之间的依赖关系,但仅在文件生成时体现,实际文件中并无体现链接选项的标记。实验还验证了,如果有一个现成的libbar.so,导入...