多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

如何从源码构建 fmt 库并运行 make test 验证构建结果

如何从源码构建 fmt 库并运行 make test 验证构建结果 如何从源码构建 fmt 库并运行 make test 验证构建结果【免费下载链接】fmtA modern formatting library项目地址: https://gitcode.com/GitHub_Trending/fm/fmt当你需要用特定版本而不是发行版包管理器提供的版本的 fmt——这个现代 C 格式化库——或想确认自己手头的源码能完整构建时官方文档给出的标准路径是 CMake Make 流程在 fmt 仓库里生成构建脚本make构建库再用make test运行测试套件验证构建结果。这条流程适用于 Unix-like 系统Linux、macOS 等前提是系统已安装 CMake、C 编译器、C 编译器和 make。获取源码git clone https://gitcode.com/GitHub_Trending/fm/fmt cd fmt克隆下来的是完整源码树。以当前仓库源码为准include/fmt/core.h 中FMT_VERSION定义为120201对应 12.2.1 版本与 ChangeLog.md 开头的12.2.1条目一致。如果你想构建某个特定版本应在克隆后切换到对应的 tag。准备条件在动手之前对照项目构建文件确认本地环境满足以下要求CMake 版本项目根目录的 CMakeLists.txt 声明了cmake_minimum_required(VERSION 3.8...3.28)本地 CMake 至少需要 3.8。C 编译器fmt 目标声明了target_compile_features(fmt PUBLIC cxx_std_11)即编译器需支持 C11。C 编译器启用测试时test/CMakeLists.txt 中有enable_language(C)并且c-test会用 C 编译器构建因此测试链路需要一个可用的 C 编译器。make在 Unix-like 系统上CMake 生成的是 Makefile后续的make、make test都依赖它。配置与构建在 fmt 仓库根目录内按官方文档描述的典型工作流操作mkdir build # Create a directory to hold the build output. cd build cmake .. # Generate native build scripts.cmake ..成功配置后build目录下会生成 Makefile。有几个默认行为值得知道都来自顶层 CMakeLists.txt当 fmt 作为顶层项目构建时FMT_MASTER_PROJECT为 ON若未显式指定CMAKE_BUILD_TYPE会被默认设为ReleaseFMT_TEST、FMT_INSTALL、FMT_DOC等选项在顶层项目下默认为 ON因此默认就会生成 test、install 和 doc 目标。配置完成后构建库make用 make test 验证构建结果库构建完成后运行make testFMT_TEST启用时顶层项目默认开启顶层 CMakeLists.txt 会调用enable_testing()并引入test/子目录test/CMakeLists.txt 为每个测试可执行文件core-test、format-test、chrono-test、printf-test、ranges-test、scan-test等通过add_test注册一个 CTest 测试项make test即由 CTest 驱动逐个编译产物并运行。测试使用的 GoogleTest 是仓库自带的见 test/gtest 目录通过test-main静态库链接进各测试无需自行安装。如果编译通过且所有注册的测试项运行通过make test正常结束这就是文档给出的对构建结果的验证方式任何测试可执行文件编译失败或有测试项未通过都会由 CTest 报错体现出来。测试可执行文件默认输出到build/bin目录——顶层 CMakeLists.txt 在未显式设置时把CMAKE_RUNTIME_OUTPUT_DIRECTORY定为${CMAKE_CURRENT_BINARY_DIR}/bin需要单独查看某个测试产物时可以直接运行该目录下的对应文件。可选调整构建方式以下都是在配置阶段传给cmake的选项构建前先选择与默认静态库构建互不冲突按需取用。构建共享库cmake -DBUILD_SHARED_LIBSTRUE ..构建带位置无关代码PIC的静态库例如后续要把它链接进另一个共享库如 Python 扩展时cmake -DCMAKE_POSITION_INDEPENDENT_CODETRUE ..关闭测试目标cmake -DFMT_TESTOFF ..官方文档说明这个选项适用于把 fmt 作为子目录加入自己项目、但不希望 fmt 的测试混入自己项目test目标的场景。注意FMT_TEST的默认值取决于构建方式fmt 是顶层项目时默认 ON通过add_subdirectory嵌入时FMT_MASTER_PROJECT为 OFFFMT_TEST默认就是 OFF无需再传。安装可选库构建成功且测试通过后文档给出的安装步骤是Unix-like 系统sudo make install这条命令会把库、头文件include/fmt下的头文件以及 CMake 配置文件、pkg-config 文件写入系统前缀目录需要 sudo 权限。如果不想改动系统环境可以跳过安装直接在自己的项目里引用build目录中的产物顶层项目下FMT_INSTALL默认为 ON想彻底去掉 install 目标可在配置时传-DFMT_INSTALLOFF。边界与限制make/make test这一流程针对 Unix-like 系统。CMake 本身可以针对任意编译器环境生成原生的 Makefile 或工程文件但在 Windows 上不会得到 Makefile也就没有make test这条命令本文不覆盖该路径。若你只是把 fmt 嵌入自己的 CMake 项目add_subdirectory或 FetchContent验证构建结果的方式是在自己的项目里配置并构建fmt::fmt目标而不是在 fmt 仓库里跑make test。编译警告默认不会导致构建失败FMT_WERROR默认 OFF需要“警告即错误”的严格构建时显式开启。完成make与make test并让其正常结束后fmt 的构建与测试验证即告完成后续按需安装或直接以构建目录产物供其他项目链接即可。【免费下载链接】fmtA modern formatting library项目地址: https://gitcode.com/GitHub_Trending/fm/fmt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表