前言spdlog++库,而且支持header only方式,但header only的使用方式会造成编译时长增加,所以这里简单描述一下,其编译静态库的方式 。
又因为spdlog还依赖另一个开源库fmt,而fmt目前已经加入标准库,所以很多时候,自己的项目会自带fmt,不需要spdlog内部绑定一个 。所以本文会采用一下方式来组成编译 。
- sdplog# 使用外部fmt
- fmt# 独立的
- 静态库
- 通过cmake方式组装工程
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最新的源码
准备源码到
deps/src/下,如:【编译静态库的方式使用spdlog和fmt】
cd ./deps/srcgit clone https://github.com/fmtlib/fmt.gitgit clone https://github.com/gabime/spdlog.git以下是在windows 10,以默认的visual studio 2019编译,不过为了方便理解,实例统一采用
build-debug和build-release,分别创建文件夹构建编译安装 。cmake --install . --prefix ../../../ --config Debug,如果在CMAKE_INSTALL_PREFIX值是有效的可以不用指定--prefixcmake --install . --config Debug注意在通过cmake生成工程时,
CMAKE_INSTALL_PREFIX通过命令选项的方式指定值时最好加引号,否则某些相对路径无法赋值进去 。本文只会使用平台无关的cmake命令来构建编译安装 。
需要先编译
fmt,再编译spdlog 。fmt
- 8.0.1
cd ./deps/src/fmtmkdir build-debug && cd build-debugcmake -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" -Ax64cmake --build . --target fmt --config Debug# 使用CMAKE_INSTALL_PREFIX的安装目录cmake --install . --config Debug# 指定指定新的安装目录cmake --install . --prefix ../../../ --config Debug编译release版本cd ./deps/src/fmtmkdir build-release && cd build-relasecmake -DCMAKE_POSITION_INDEPENDENT_CODE=TRUE-DCMAKE_INSTALL_PREFIX="../../.." -DCMAKE_CXX_STANDARD=17 -DCMAKE_BUILD_TYPE=Release .. -G"Visual Studio 16 2019" -Ax64cmake --build . --target fmt --config Releasecmake --install . --config Releasespdlog- 1.9.2
mkdir build-debug && cd build-debugcmake -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 Debugcmake --install . --config Debugrelease就不说了 。使用自编译的fmt和spdlog目录结构
├── CMakeLists.txt├── Log.cpp├── Log.h├── deps│ ├── include│ └── lib├── hello.cpp└── readme.md使用find_packagefind_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/
- 春季老年人吃什么养肝?土豆、米饭换着吃
- 三八妇女节节日祝福分享 三八妇女节节日语录
- 老人谨慎!选好你的“第三只脚”
- 校方进行了深刻的反思 青岛一大学生坠亡校方整改校规
- 脸皮厚的人长寿!有这特征的老人最长寿
- 长寿秘诀:记住这10大妙招 100%增寿
- 春季老年人心血管病高发 3条保命要诀
- 眼睛花不花要看四十八 老年人怎样延缓老花眼
- 香槟然能防治老年痴呆症? 一天三杯它人到90不痴呆
- 老人手抖的原因 为什么老人手会抖
