CMake 教程(二)添加库


在第一节 CMake 教程(一)初识 CMake 中,我们已经了解和实现了通过 CMake 来创建一个基本项目。本节我们将通过两个实例来学习如何在项目中创建和使用库。

一、实例一——创建库

1、add_library

要在 CMake 中添加库,就需要使用 add_library 命令来指定哪些源文件应组成库。

add_library(<name> [<type>] [EXCLUDE_FROM_ALL] <sources>...)

其作用为:添加一个名为 <name> 的库目标,该目标要从命令调用中列出的源文件构建。

参数说明:

  • <name> 对应于逻辑目标名称,并且在项目中必须是全局唯一的。构建的库的实际文件名是根据本机平台的约定(例如 lib<name>.a<name>.lib)构建的。
  • 可选的 <type> 指定要创建的库的类型:
    • STATIC:链接其他目标时使用的目标文件存档。
    • SHARED:一个动态库,可以由其他目标链接并在运行时加载。
    • MODULE:一个插件,它不能被其他目标链接,但可以在运行时使用类似 dlopen 的功能动态加载。

如果未给出 <type>,则默认值为 STATICSHARED

2、target_include_directories()、target_link_libraries()

我们可以使用一个或多个子目录来组织项目,而不是将所有源文件放在一个目录中。在这种情况下,我们将专门为我们的库创建一个子目录。在这里,我们可以添加新的 CMakeLists.txt 文件和一个或多个源文件。在顶级 CMakeLists.txt 文件中,我们将使用 add_subdirectory() 命令将子目录添加到构建中。

创建库后,它通过 target_include_directories()target_link_libraries() 连接到我们的可执行目标。

2.1 target_include_directories()

target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

指定编译给定目标(例如可执行文件、库等)时要使用的包含目录。命名的 <target> 必须由 add_executable()add_library() 等命令创建,并且不能是 ALIAS 目标。

  • target:目标名称,可以是一个可执行文件、静态库或动态库的名称。
  • SYSTEM:可选参数,指定包含目录是否应被视为系统目录。表示编译器不会产生警告。
  • [AFTER|BEFORE]:可选参数:
    • BEFORE:参数用于将包含目录添加到已有的包含目录之前,即在搜索其他包含目录之前搜索指定的目录。
    • AFTER:参数用于将包含目录添加到已有的包含目录之后,即在搜索其他包含目录之后搜索指定的目录。
  • <INTERFACE|PUBLIC|PRIVATE>:可选参数,指定添加的包含目录的属性。
    • INTERFACE:目标的接口包含目录,这意味着只有依赖该目标的其他目标才能看到这个包含目录。对于依赖该目标的目标来说,这个包含目录会像是它自己的接口一样可见。
    • PUBLIC:目标的公共包含目录,这意味着该目标及依赖它的其他目标都可以看到这个包含目录。
    • PRIVATE:目标的私有包含目录,只有该目标自身才可见这个包含目录。
  • item1...:需要添加的包含目录。

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值