大佬教程收集整理的这篇文章主要介绍了编译静态库的方式使用spdlog和fmt,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
spdlog++库,而且支持header only方式,但header only的使用方式会造成编译时长增加,所以这里简单描述一下,其编译静态库的方式。
又因为Spdlog还依赖另一个开源库@L_801_1@,而fmt
目前已经加入标准库,所以很多时候,自己的项目会自带fmt
,不需要spdlog内部绑定一个。所以本文会采用一下方式来组成编译。
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
有些命令可能在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-debug
和build-release
,分别创建文件夹构建编译安装。
cmake --install . --prefix ../../../ --config Debug
,如果在CMAKE_INSTall_PREFIX值是有效的可以不用指定--prefix
cmake --install . --config Debug
在通过cmake生成工程时,CMAKE_INSTall_PREFIX
通过命令选项的方式指定值时最好加引号,否则某些相对路径无法赋值进去。
本文只会使用平台无关的cmake命令来构建编译安装。
需要先编译fmt
,再编译spdlog
。
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
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
@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就不说了。
├── 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,请注明来意。