美文网首页
【Toki从零学CMake】构建可安装的C语言库

【Toki从零学CMake】构建可安装的C语言库

作者: TokiHunter | 来源:发表于2021-11-11 15:21 被阅读0次

    目录

    1. 构建简单的C语言库
    2. 构建可安装的C语言库

    参考文档

    CMake 官方文档
    CMake 项目命令—安装时运行的规则
    CMake 命令行工具—安装命令
    CMake 入门实战

    运行环境

    2021年11月
    MBP M1
    macOS Big Sur 11.4

    项目目录

    .
    ├── include # 头文件合集
    │   ├── CMakeLists.txt
    │   └── date.h
    │── library # 实现文件合集
    │   ├── CMakeLists.txt
    │   └── date.c
    ├── CMakeLists.txt
    └── main.c
    

    库主体

    include中新增CMakeLists.txt文件,用来向系统目录中安装库的头文件。
    ./library/CMakeLists.txt,仅须要添加构建结果的安装规则。

    库配置文件

    # ./include/CMakeLists.txt
    
    file(GLOB headers "*.h")
    install(
        FILES ${headers} 
        DESTINATION include/date
        PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
    )
    
    #./library/CMakeLists.txt
    
    cmake_minimum_required (VERSION 3.5)
    
    project(
        date 
        VERSION 0.1.0
        LANGUAGES C
    )
    
    set(DATE_SOVERSION 1)
    
    # 查找目录下的所有源文件,并将名称保存到 src_list 变量
    aux_source_directory(. src_list)
    
    #构建静态包 date.a
    add_library(${PROJECT_NAME} STATIC ${src_list})
    
    install(
        TARGETS ${PROJECT_NAME}
        DESTINATION lib
        PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
    )
    

    主项目内容

    由于需要通过./include/CMakeLists.txt配置库的头文件安装规则,所以在主项目需要新增对./include目录的构建。

    主项目配置文件

    #./CMakeLists.txt
    
    cmake_minimum_required (VERSION 3.5)
    
    project (demo)
    
    # 指定生成目标
    add_executable(demo main.c)
    
    # 引用date的头文件,这里的引用路径决定了代码中对头文件的引用路径
    set(DATE_INCLUDE "./include")
    include_directories(${DATE_INCLUDE})
    add_subdirectory(${DATE_INCLUDE})
    # 构建date库
    set(DATE_LIBRARY "./library")
    add_subdirectory(${DATE_LIBRARY})
    # 链接date库
    target_link_libraries(demo date)
    

    构建安装

    1、在根目录创建build文件夹
    2、在根目录执行下面的两行命令

    $ cmake -B build
    $ cmake --build build --config Debug --target all -j 10 --
    

    3、检查构建结果

    • 库二进制文件:build/date/library/libdate.a
    • 主项目可执行文件: build/demo

    4、安装

    $ sudo cmake --install ./build
    

    5、检查安装结果,具体安装目录以install中的配置为准

    $ ls /usr/local/include/date
    date.h
    $ ls /usr/local/lib/libdate*
    /usr/local/lib/libdate.a
    

    相关文章

      网友评论

          本文标题:【Toki从零学CMake】构建可安装的C语言库

          本文链接:https://www.haomeiwen.com/subject/vnxgzltx.html