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...
CMake中的关键字PUBLIC,INTERFACE, PRIVATE 与C++语言中类继承时使用的public、private的作用非常相似。结合VSCode编写具体代码来演示这几个关键字的实际用途。 1、代码结构 CMakeLists.txt cmake_minimum_required(VERSION3.5)project(App)add_library(libASTATIClibA/libA.cpp)target_include_directories(libAPUBLIC${C...
target_include_directories(helloworld INTERFACE ${CMAKE_CURRENT_LIST_DIR}/)导致的,这条命令是将当前目录,也就是lib/添加到helloworld的include下,并且添加INTERFACE参数,INTERFACE的意思就是将后面的条目导出,但自己却不包含它,可以看生成的命令确实如此, 将INTERFACE改为PRIVATE, lib/CMakeLists.txt cmake_minimum...
[System.Runtime.InteropServices.Guid("728AB30B-217D-11DA-B2A4-000E7BBB2B09")]publicinterfaceCX509PublicKey:Microsoft.Hpc.Scheduler.Store.IX509PublicKey Derived Microsoft.Hpc.Scheduler.Store.CX509PublicKeyClass Attributes GuidAttribute Implements ...
最近看了很多项目的代码,代码是用cmake编译的,由于各种库之间链接关系错综复杂,加上PRIVATE,PUBLIC,INTERFACE属性值,我在添加代码的时候总会遇到稀奇古怪的编译的问题,网上看了很多文章,写的都不是很靠谱,正好看到一个b站视频讲的不错,解决了我很多疑惑,我又有了新的疑惑,折腾了一晚上终于把这个搞明白了,分享给大家...
PUBLIC - 既被添加到目标(库)的包含路径中,同时添加到了链接这个库的其他目标(库或者可执行程序)的包含路径中 简单来说,不考虑文件大小,重复引用,全部用PUBLIC就完事了。 add_library命令如果没有可添加的执行文件,只能用INTERFACE来修饰 add_library
最近看了很多项目的代码,代码是用cmake编译的,由于各种库之间链接关系错综复杂,加上PRIVATE,PUBLIC,INTERFACE属性值,我在添加代码的时候总会遇到稀奇古怪的编译的问题,网上看了很多文章,写的都不是很靠谱,正好看到一个b站视频讲的不错,解决了我很多疑惑,我又有了新的疑惑,折腾了一晚上终于把这个搞明白了,分享给大家...
INTERFACE依赖项B并不链接到目标A,若有C链接了目标A,C会链接依赖项B。PUBLIC依赖项B链接到目标A,若...
但除了这些基本命令,CMake还提供了三个关键字:PUBLIC, PRIVATE, 和 INTERFACE,用于更细致地控制这些依赖关系的作用域和可见性。 PUBLIC 当我们将一个目标A链接到另一个目标B,并指定PUBLIC关键字时,意味着目标B可以直接使用目标A中的公共符号(如函数和变量)。此外,任何链接到目标B的其他目标也可以访问这些符号。换...
INTERFACE作用是在编译ibhello.so的时候,不使用这些参数,但是在编译需要链接libhello.so的目标(应用程序或者库)时,编译指令中加入这些参数。换句话说就是把这些参数传给这个库的使用者。 PUBLIC是INTERFACE 和 PRIVATE的两种功能的合并。也就是编译当前目标使用这个参数,编译这个目标的使用者时,也使用这个参数。