如何在Windows平台的Code::Blocks中配置spdlog日志库?
嘿,我太懂你这种懵懵的感觉了——刚接触CMake和第三方库配置,尤其是之前一直靠IDE自动搞定,突然碰上新库的配置真的容易绕晕!我来给你把事情掰扯清楚~
先解决你最困惑的问题:为什么CMake例子里会有我的项目文件?
你说的完全没错!一个库的编译脚本本来就不该依赖你的项目文件!那些你看到的带example.cpp或者项目头文件的CMake脚本,是用来演示「如何在你的项目里通过CMake引入spdlog」,而不是让你直接用这个脚本去编译spdlog本身。
很多开源库的示例会把「编译库本身」和「演示如何使用库的示例项目」写在同一个脚本里,这才让你产生了误解。spdlog自己的核心CMake脚本(源码根目录的CMakeLists.txt)只会处理库的编译,根本不会管你的项目文件~
不用CMake,直接在Code::Blocks里配置spdlog的步骤
既然你习惯了用Code::Blocks手动配置库(就像之前弄SDL那样),那咱们就不用折腾CMake来管理你的项目,只需要用CMake帮你编译出spdlog的库文件,再手动配置到你的项目里就行:
步骤1:获取spdlog源码
下载spdlog v1.x版本的源码包,解压到你方便的路径,比如D:\ThirdPartyLibs\spdlog。
步骤2:用CMake生成Code::Blocks工程来编译spdlog
CMake其实可以帮你生成Code::Blocks能识别的工程文件,不用你自己写脚本:
- 打开CMake GUI工具,在「Where is the source code」里选择刚才解压的spdlog源码根目录;在「Where to build the binaries」里新建一个
build文件夹(比如D:\ThirdPartyLibs\spdlog\build),用来放编译产物。 - 点击「Configure」,选择你Code::Blocks用的编译器(比如MinGW),然后跟着提示完成配置。
- 如果你想编译静态库,可以勾选
SPDLOG_BUILD_STATIC选项;如果想动态库就不用改。然后点击「Generate」,这样build文件夹里就会生成Code::Blocks的工程文件了。
步骤3:编译spdlog库
打开build文件夹里生成的Code::Blocks工程(比如spdlog.cbp),切换到「Release」模式,点击编译按钮。编译完成后,会在build文件夹的lib目录下得到库文件(静态库是libspdlog.a,动态库会有.dll和.a两个文件)。
步骤4:在你的项目里配置spdlog
这一步就和你配置SDL完全一样:
- 编译器搜索目录:打开「Codeblocks->项目->编译选项->搜索目录->编译器」,添加spdlog源码根目录下的
include文件夹(比如D:\ThirdPartyLibs\spdlog\include),这样你就能在代码里#include <spdlog/spdlog.h>了。 - 链接器搜索目录:打开「Codeblocks->项目->编译选项->搜索目录->链接器」,添加刚才编译出来的库所在的
lib文件夹(比如D:\ThirdPartyLibs\spdlog\build\lib)。 - 链接器设置:打开「Codeblocks->项目->编译选项->链接器设置->其他链接选项」,加上
-lspdlog(如果是静态库,Windows下MinGW可能还要加-lpthread来支持线程)。
额外捷径:用header-only模式(不用编译库)
spdlog还支持header-only模式,也就是不用编译库文件,直接用头文件就能跑:
- 只需要把spdlog的
include文件夹加到编译器搜索目录,然后在你的项目编译选项里添加-DSPDLOG_HEADER_ONLY宏(在「编译器设置->其他选项」里加),之后直接包含头文件就能用spdlog的所有功能了,连链接库的步骤都省了!
备注:内容来源于stack exchange,提问作者Mabbus

