如何从零构建CMake项目:modern-cmake-sample完整入门教程 如何从零构建CMake项目modern-cmake-sample完整入门教程【免费下载链接】modern-cmake-sampleExample library that shows best practices and proper usage of CMake by using targets项目地址: https://gitcode.com/gh_mirrors/mo/modern-cmake-sample现代CMake是C项目构建的强大工具本文将通过modern-cmake-sample项目为你展示如何从零开始构建一个规范的CMake项目。这个示例项目展示了最佳实践和目标target的正确使用方法非常适合CMake新手学习。 准备工作了解项目结构在开始之前让我们先了解一下modern-cmake-sample的项目结构modern-cmake-sample/ ├── example_exec/ # 可执行文件示例 │ ├── src/ │ │ └── main.cpp │ └── CMakeLists.txt ├── libjsonutils/ # 库项目 │ ├── cmake/ # CMake配置文件 │ ├── include/ # 头文件 │ ├── src/ # 源文件 │ ├── test/ # 测试代码 │ └── CMakeLists.txt ├── LICENSE.md └── README.md这个结构清晰地分离了库代码和可执行文件是现代CMake项目的典型组织方式。 第一步创建基础CMakeLists.txt每个CMake项目的起点都是CMakeLists.txt文件。让我们看看libjsonutils库的基础配置cmake_minimum_required(VERSION 3.13...3.19 FATAL_ERROR) project(libjsonutils VERSION 1.0.0 LANGUAGES CXX) # 确保自定义模块如FindRapidJSON能被找到 list(INSERT CMAKE_MODULE_PATH 0 ${CMAKE_SOURCE_DIR}/cmake)cmake_minimum_required指定项目所需的最低CMake版本project定义项目名称、版本和支持的语言CMAKE_MODULE_PATH添加自定义CMake模块的搜索路径 第二步定义库目标在CMake中目标target是构建的基本单元。下面是定义库目标的关键代码add_library(jsonutils src/json_utils.cpp src/file_utils.h ) # 添加别名以便在构建树内部使用 add_library(JSONUtils::jsonutils ALIAS jsonutils)add_library命令创建了一个名为jsonutils的库目标并指定了源文件。使用别名可以让其他目标更清晰地引用这个库。 第三步设置目标属性现代CMake推荐使用目标属性来配置编译选项、包含目录和链接库target_include_directories(jsonutils PUBLIC $INSTALL_INTERFACE:include $BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src ) target_compile_features(jsonutils PRIVATE cxx_auto_type) target_compile_options(jsonutils PRIVATE $$OR:$CXX_COMPILER_ID:Clang,$CXX_COMPILER_ID:AppleClang,$CXX_COMPILER_ID:GNU: -Wall -Wextra -Wpedantic) target_link_libraries(jsonutils PUBLIC Boost::headers RapidJSON::RapidJSON PRIVATE Boost::regex )target_include_directories设置头文件搜索路径区分PUBLIC和PRIVATEtarget_compile_features指定需要的C特性target_compile_options设置编译选项这里使用了生成器表达式根据编译器类型设置不同选项target_link_libraries链接依赖库同样区分PUBLIC和PRIVATE 第四步创建可执行文件库项目设置完成后让我们看看如何创建依赖于这个库的可执行文件cmake_minimum_required(VERSION 3.13...3.16 FATAL_ERROR) project(example_exec VERSION 0.0.1 LANGUAGES CXX) add_executable(example_exec src/main.cpp) target_compile_features(example_exec PRIVATE cxx_auto_type) find_package(JSONUtils 1.0 REQUIRED) target_link_libraries(example_exec JSONUtils::JSONUtils)find_package命令用于查找我们之前创建的JSONUtils库然后通过target_link_libraries将可执行文件与库链接起来。 第五步安装配置为了让其他项目能够方便地使用你的库需要配置安装规则include(GNUInstallDirs) set(INSTALL_CONFIGDIR ${CMAKE_INSTALL_LIBDIR}/cmake/JSONUtils) install(TARGETS jsonutils EXPORT jsonutils-targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ) install(DIRECTORY include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) install(EXPORT jsonutils-targets FILE JSONUtilsTargets.cmake NAMESPACE JSONUtils:: DESTINATION ${INSTALL_CONFIGDIR} )这些命令指定了库、头文件和导出目标的安装位置使其他项目可以通过find_package找到你的库。✅ 第六步添加测试一个完善的项目离不开测试。modern-cmake-sample使用了Google Test框架enable_testing() add_subdirectory(test)测试代码位于libjsonutils/test/目录下通过add_subdirectory添加到项目中。️ 构建项目的完整步骤现在你已经了解了项目的结构和关键配置让我们看看如何实际构建这个项目克隆仓库git clone https://gitcode.com/gh_mirrors/mo/modern-cmake-sample cd modern-cmake-sample创建构建目录并进入mkdir build cd build运行CMake配置cmake ..编译项目make运行测试make test安装项目可选sudo make install 总结CMake最佳实践通过modern-cmake-sample项目我们学习了现代CMake的核心最佳实践使用目标target作为构建的基本单元通过目标属性配置编译选项和依赖关系区分PUBLIC和PRIVATE接口明确依赖关系提供安装配置使库可以被其他项目轻松使用集成测试确保代码质量这个项目的完整代码可以在libjsonutils/CMakeLists.txt和example_exec/CMakeLists.txt中查看里面包含了更多高级CMake特性的使用示例。希望这篇教程能帮助你快速掌握现代CMake的使用方法开始构建自己的C项目【免费下载链接】modern-cmake-sampleExample library that shows best practices and proper usage of CMake by using targets项目地址: https://gitcode.com/gh_mirrors/mo/modern-cmake-sample创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考