• 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

     

  • 相关阅读:
    linux安装java环境(jdk安装,java安装,通过安装包方式)
    Linux难学?大神告诉你,Linux到底该怎么自学!
    docker(1) dockfile制作docker java镜像 并启动
    小说推文和短剧推广以及电影达人带货电影票
    R语言的简介和安装
    网络安全(黑客)自学
    纯净版CentOS7设置ip
    vue3使用v-model控制子组件进行双向数据绑定
    1783_CMD启动MATLAB同时执行一个脚本
    分享 | 智慧水务建设方案
  • 原文地址:https://blog.csdn.net/jiedichina/article/details/126687785