C&C++   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了编译静态库的方式使用spdlog和fmt大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

前言

spdlog++库,而且支持header only方式,但header only的使用方式会造成编译时长增加,所以这里简单描述一下,其编译静态库的方式。

因为Spdlog还依赖另一个开源库@L_801_1@,而fmt目前已经加入标准库,所以很多时候,自己的项目会自带fmt,不需要spdlog内部绑定一个。所以本文会采用一下方式来组成编译。

  • sdplog # 使用外部fmt
  • fmt # 独立的
  • 静态库
  • 通过cmake方式组装工程
  • @H_874_19@

    实例工程项目目录

    deps
    ├── include    
    │   ├── fmt
    │   └── spdlog
    ├── lib
    │   ├── cmake       # 包含一些 cmake包使用的脚本 如 find_package()
    │   ├── fmt.lib
    │   ├── fmtd.lib
    │   ├── libfmt.a
    │   ├── libfmtd.a
    │   ├── libspdlog.a
    │   ├── libspdlogd.a
    │   ├── pkgconfig   # 包含一些 cmake包使用的脚本 如 find_package()
    │   ├── spdlog.lib
    │   └── spdlogd.lib
    ├── lib64   # 有的linux(CentOS)下会区分lib64/lib,编译64位上面的lib内容会放入lib64下
    └── src
        ├── fmt         # fmt源码 可直接通过git clone 获取
        └── spdlog
    

    编译

    准备

    • cmake 19.x 其他版本没跑过
    • fmt、spdlog最新的源码
    • @H_874_19@

      有些命令可能在linux下略有不同

      准备源码到deps/src/下,如:

      cd ./deps/src
      git clone https://github.com/fmtlib/fmt.git
      git clone https://github.com/gabime/spdlog.git
      

      以下是在windows 10,以默认的visual studio 2019编译,
      不过为了方便理解,实例统一采用build-debugbuild-release,分别创建文件夹构建编译安装。

      cmake --install . --prefix ../../../ --config Debug,如果在CMAKE_INSTall_PREFIX值是有效的可以不用指定--prefix
      cmake --install . --config Debug

      注意

      在通过cmake生成工程时,CMAKE_INSTall_PREFIX通过命令选项的方式指定值时最好加引号,否则某些相对路径无法赋值进去。

      本文只会使用平台无关的cmake命令来构建编译安装。
      需要先编译fmt,再编译spdlog

      fmt

      • 8.0.1
      • @H_874_19@

        编译debug版

        cd ./deps/src/fmt
        mkdir build-debug && cd build-debug
        cmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE  -DCMAKE_INSTall_PREFIX="../../.." -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Debug .. 
        # 或
        cmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE  -DCMAKE_INSTall_PREFIX="../../.." -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Debug .. -G"Visual studio 16 2019" -Ax64
        cmake --build . --target fmt --config Debug
        
        # 使用CMAKE_INSTall_PREFIX的安装目录
        cmake --install . --config Debug
        # 指定指定新的安装目录
        cmake --install . --prefix ../../../ --config Debug
        

        编译release版本

        cd ./deps/src/fmt
        mkdir build-release && cd build-relase
        cmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE  -DCMAKE_INSTall_PREFIX="../../.." -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Release .. -G"Visual studio 16 2019" -Ax64
        cmake --build . --target fmt --config Release
        cmake --install . --config Release
        

        spdlog

        • 1.9.2
        • @H_874_19@

          编译debug版

          @H_894_5@mkdir build-debug && cd build-debug
          cmake -D SPDLOG_FMT_EXTERNAL=ON  -DCMAKE_INSTall_PREFIX="../../.." -DMAKE_CXX_STANDARD=17 -DSPDLOG_BUILD_EXAMPLE=OFF -DSPDLOG_FMT_EXTERNAL=ON -DCMAKE_BUILD_TYPE=Debug ..
          cmake --build . --target spdlog --config Debug
          cmake --install . --config Debug
          

          release就不说了。

          使用自编译的fmt和spdlog

          目录结构

          ├── CMakeLists.txt
          ├── Log.cpp
          ├── Log.h
          ├── deps
          │   ├── include
          │   └── lib
          ├── Hello.cpp
          └── readme.md
          
          @H_675_119@使用find_package

          find_package(fmt requIRED PATHS ./deps/ NO_DEFAULT_PATH)
          find_package(spdlog requIRED PATHS ./deps/ NO_DEFAULT_PATH)
          cmake会在./deps/lib/cmake./deps/lib64/cmake,搜索对应的cmake配置文件(前面cmake --install,会拷贝的)

          直接使用

          直接配置相应的头文件目录和库目录

          target_include_directories(${PROjeCt_name} PUBLIC ./deps/includE)
          target_link_directories(${PROjeCt_name} PUBLIC ./deps/lib)
          

          最后

          完整实例
          https://github.com/iclodq/fmtspdlog


          首发于:http://lrzll.com/tech/cpp/fmtspdlog/

          大佬总结

          以上是大佬教程为你收集整理的编译静态库的方式使用spdlog和fmt全部内容,希望文章能够帮你解决编译静态库的方式使用spdlog和fmt所遇到的程序开发问题。

          如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

          本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
          如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: