• cmake add_library编译链接静态库cmakelists


         本篇文章我们来编写CMakeLists.txt使用cmake的add_library的构建静态库,并使用target_link_libraries链接指定的静态库。

    cmake的linux windows 和linux环境的准备可以我看前面的文章:

    一 代码准备

    为了项目更简单点,我这边把静态库和配置和链接静态库的配置放在一个CMakeLists.txt文件中

    下面是文件列表(所有文件在同一个目录)

    xlog.h

    xlog.cpp

    test_xlog.cpp

    CMakeLists.txt

    下面我们分别来看下每个文件中的内容,首先是库的代码xlog.h 和xlog.cpp 。

    1. //xlog.h
    2. #ifndef XLOG_H
    3. #define XLOG_H
    4. #include
    5. class XLog
    6. {
    7. public:
    8. void Add(std::string log);
    9. };
    10. #endif
    1. // xlog.cpp
    2. #include "xlog.h"
    3. #include
    4. using namespace std;
    5. void XLog:
    6. :Add(std::string log)
    7. {
    8. cout<
    9. }

    二 CMake 编译静态库 add_library

    下面我们来编写CMakeLists.txt

    1. cmake_minimum_required (VERSION 3.0)
    2. project (xlog)
    3. add_library(xlog STATIC xlog.cpp)

    其中头文件可以加入到 add_library中,比如 add_library(xlog STATIC xlog.cpp xlog.h) 这样保证依赖关系,头文件更改时库也会重新编译。

    add_library中的第二个参数 STATIC 表示是静态库,如果不加STATIC的话比如 add_library(xlog xlog.cpp) 就是默认编译动态库,如果要编译静态库再通过cmake的预制变量来控制。

    STATIC 替换为SHARED 就是指定编译为动态库,例如:add_library(xlog SHARED xlog.cpp) 。

    如果是Linux动态库代码不需要调整,Windows动态库需要在代码中添加 __declspec(dllexport)不然导不出lib文件。

    下面在CMakeLists.txt所在目录运行

    cmake -S . -B build

    cmake --build build

    三 CMake 链接静态库

    静态库就编译完成,下面引入静态库,添加测试的程序test_xlog.cpp并且再次编辑CMakeLists.txt

    //test_xlog.cpp

    1. //test_xlog.cpp
    2. #include
    3. #include "xlog.h"
    4. using namespace std;
    5. int main(int argc,char *argv[])
    6. {
    7. out<<"test cmake lib"<
    8. XLog log;
    9. log.Add("test xlog");
    10. return 0;
    11. }

    #CMakeLists.txt

    1. #CMakeLists.txt
    2. cmake_minimum_required (VERSION 3.0)
    3. project (xlog)
    4. add_library(xlog STATIC xlog.cpp)
    5. add_executable(test_xlog test_xlog.cpp)
    6. # 指定加载的库
    7. target_link_libraries(test_xlog xlog)

    再次运行

    cmake -S . -B build

    cmake --build build

    就编译出静态库和导入静态库的测试程序。

     

     

    更多的资料可以看cmake官方手册 cmake.org.cn

     

  • 相关阅读:
    生产业务环境下部署 Kubernetes 高可用集群的步骤
    策略模式在不同情况下的使用方法
    Qt开发经验小技巧226-230
    一款清理本地仓库jar包的maven插件
    【Java八股文总结】之集合
    全网最硬核 JVM TLAB 分析 4. TLAB 基本流程全分析
    vscode 如何连接 WSL (不能通过 IP 地址连接)
    Spring高手之路5,Dubbo服务注册与发现(文末送书)
    未来趋势:算法备案法规的演进与展望
    java毕业设计Steam游戏平台系统(附源码、数据库)
  • 原文地址:https://blog.csdn.net/jiedichina/article/details/126687785