cmake add_library详解

在 CMake 中,add_library 命令用于向项目添加一个库文件,并定义其类型(静态库或共享库)。这个命令是管理库文件的主要方法之一,用于指定源文件、依赖项和其他相关设置。

基本语法

add_library(target_name [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            source1 [source2 ...])
  • target_name: 库文件的名称,通常是不带扩展名的名字,如 my_library。
  • [STATIC | SHARED | MODULE]: 指定库文件的类型,可选参数。默认为 STATIC 静态库。
    • STATIC: 静态库,会被链接到其他目标的可执行文件中。
    • SHARED: 共享库(动态库),在运行时动态加载到内存中。
    • MODULE: 在某些平台上的插件库类型。
  • [EXCLUDE_FROM_ALL]: 可选参数,如果设置,则将该库文件排除在 make all 或 build 目标之外。
  • source1, source2, …: 库文件的源文件列表,可以是源文件的路径或变量。

示例

以下是几个使用 add_library 命令的示例:

1. 添加静态库

cmake_minimum_required(VERSION 3.10)
project(StaticLibraryExample)

# 添加静态库
add_library(my_static_lib STATIC
    src/file1.cpp
    src/file2.cpp
)

# 将静态库的头文件目录包含在编译路径中
target_include_directories(my_static_lib PUBLIC include)

在这个示例中,我们创建了一个名为 my_static_lib 的静态库,并将 src/file1.cpp 和 src/file2.cpp 作为库文件的源文件。通过 target_include_directories 命令将 include 目录添加到静态库的头文件搜索路径中,使得其他目标可以访问到这些头文件。

2. 添加共享库(动态库)

cmake_minimum_required(VERSION 3.10)
project(SharedLibraryExample)

# 添加共享库
add_library(my_shared_lib SHARED
    src/library.cpp
)

# 设置共享库的版本号
set_target_properties(my_shared_lib PROPERTIES
    VERSION 1.2.3
    SOVERSION 1
)

在这个示例中,我们创建了一个名为 my_shared_lib 的共享库,并将 src/library.cpp 作为共享库的源文件。使用 set_target_properties 命令设置了共享库的版本号,VERSION 表示库的版本,SOVERSION 表示库的主版本号。

3. 排除库文件

cmake_minimum_required(VERSION 3.10)
project(ExcludeLibraryExample)

# 添加库文件,并排除在所有目标之外
add_library(my_lib STATIC EXCLUDE_FROM_ALL
    src/main.cpp
    src/helper.cpp
)

# 添加可执行目标,依赖于库文件
add_executable(my_program
    app/main.cpp
)

target_link_libraries(my_program PRIVATE my_lib)

在这个示例中,我们创建了一个名为 my_lib 的静态库,并使用 EXCLUDE_FROM_ALL 参数将其排除在 make all 或 build 目标之外。然后,我们创建了一个可执行目标 my_program,并将 my_lib 库文件链接到该目标中。

注意事项

  • 库文件类型: 使用 STATIC、SHARED 或 MODULE 参数来明确指定库文件的类型,这决定了库文件的链接方式和行为。
  • 源文件路径: 可以使用相对路径或绝对路径指定库文件的源文件,这些文件将会被编译为库文件。
  • 目标属性: 使用 set_target_properties 命令可以进一步设置库文件的属性,如输出名称、编译选项等。

结论
add_library 命令是 CMake 中管理库文件的核心命令之一,通过它可以定义并配置静态库、共享库等不同类型的库文件。合理使用 add_library 命令可以帮助组织和管理项目中的模块化代码,提高项目的可维护性和灵活性。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值