CMake中的PRIVATE、PUBLIC与INTERFACE关键字
出于一些目的,现在需要使用开源的GCC来编译嵌入式系统,主要是编译STM32F103系列MCU。在使用ARM公司的GCC交叉编译器编写STM32程序的时候,我是使用我习惯的CMake来构建makefile。这时,问题就来,我看STM32CubeMX在生成的CMakeLists.txt文件时,里面有PRIVATE、PUBLIC与INTERFACE关键字。查询了一些网上资料,分享在论坛。大家一起学习,共同提高。
链接权限的基本概念
在CMake中,链接权限是一个核心的概念。它决定了库在何时被链接到目标上。简单来说,链接权限就是一个规则,告诉CMake如何处理库和目标之间的关系。
链接权限的基本定义
在CMake中,链接权限决定了库在何时被链接到目标上。主要有三种权限:
PRIVATE (私有): 当目标自身需要此链接库时使用
PUBLIC (公共): 当目标自身或其他目标链接了这个目标时使用
INTERFACE (接口): 当目标自身不需要此链接库,但其他目标链接了这个目标时使用
这三种权限的存在,使得我们可以更加灵活地管理项目的依赖关系,确保每个目标只链接它真正需要的库。
链接权限的详细说明
PRIVATE
当目标自身需要此链接库时使用。
如果其他目标链接了这个目标,它们不会继承这个链接库。
对于静态库,这意味着当目标被构建时,私有依赖项会被链接。
对于共享库和可执行文件,这意味着当它们被构建时,私有依赖项会被链接。
PUBLIC
当目标自身需要此链接库,或者其他目标链接了这个目标时使用。
其他目标链接这个目标时,它们会继承这个链接库。
对于静态库,这意味着当目标被构建或者其他目标链接了这个目标时,公共依赖项会被链接。
对于共享库和可执行文件,这意味着当它们被构建或者其他目标链接了这个目标时,公共依赖项会被链接。
INTERFACE
当目标自身不需要此链接库,但其他目标链接了这个目标时使用。
其他目标链接这个目标时,它们会继承这个链接库,但目标自身不会链接这个库。
这主要用于头文件只的库或者当你只想传递链接依赖而不实际链接它们时。
这么看下来,这三个关键字的理解就不难了。而且,对于我的小嵌入式系统项目来说,其实也不用区分的这么讲究~~~~