当前位置: 首页 > wzjs >正文

如何做vip微信电影网站宁波网站推广公司有哪些

如何做vip微信电影网站,宁波网站推广公司有哪些,深圳网站建设公司是,公司网站制作招聘CMake 是 C 项目中最主流的构建系统之一,而随着 CMake 3.x ,4.x的发展,Modern CMake(现代 CMake)已成为推荐的最佳实践。 本篇文章将用通俗易懂的方式,带你从头理解并实践 Modern CMake 的核心理念&#x…

CMake 是 C++ 项目中最主流的构建系统之一,而随着 CMake 3.x ,4.x的发展,Modern CMake(现代 CMake)已成为推荐的最佳实践。

本篇文章将用通俗易懂的方式,带你从头理解并实践 Modern CMake 的核心理念,包括 target_* 系列命令、文件组织、安装与打包、测试下游项目、以及 CMakePresets 的使用。


一、Modern CMake 的核心思想

传统 CMake 中常用的 include_directories()add_definitions()file(GLOB ...) 等方式,容易带来依赖混乱。

Modern CMake 提倡:一切都通过 target 管理

核心原则是:

  • 每个库/程序用一个 add_library()add_executable() 创建 target
  • 使用 target_sources()target_include_directories()target_link_libraries() 配置 target 的行为
  • 避免全局变量,改用 target 作用域

二、目录结构设计

一个清晰的目录结构是 Modern CMake 的第一步:

foo_project/
├── CMakeLists.txt
├── include/
│   └── foo/
│       └── foo.h
├── src/
│   └── foo.cpp
├── test_app/
│   ├── main.cpp
│   └── CMakeLists.txt
├── CMakePresets.json
└── fooConfig.cmake.in
  • include/foo/foo.h:公共头文件
  • src/foo.cpp:实现文件
  • test_app/:测试程序

三、使用 target_sources 管理源码

Modern CMake 中推荐使用 target_sources() 明确地将头文件和源文件加入库:

add_library(foo)  # 创建目标 footarget_sources(fooPUBLICFILE_SET foo_headers TYPE HEADERS         # 定义一个文件集用于安装头文件BASE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/includeFILES ${CMAKE_CURRENT_SOURCE_DIR}/include/foo/foo.hPRIVATE${CMAKE_CURRENT_SOURCE_DIR}/src/foo.cpp   # 私有源文件不被安装
)

这不仅清晰地标明了头文件和源文件的作用域,还能与 install() 一起自动安装。


四、安装与导出库

使用 install() 命令,可以将构建好的库、头文件和 CMake 配置文件安装到系统或本地目录中。

install(TARGETS fooEXPORT fooTargets                           # 导出 target 定义供下游使用FILE_SET foo_headers DESTINATION include    # 安装头文件到 include/LIBRARY DESTINATION lib                     # 安装 .so 动态库ARCHIVE DESTINATION lib                     # 安装 .a 静态库
)install(EXPORT fooTargets                     # 安装导出文件FILE fooTargets.cmakeNAMESPACE foo::                             # 添加命名空间,使用 foo::fooDESTINATION lib/cmake/foo
)configure_package_config_file(fooConfig.cmake.in${CMAKE_CURRENT_BINARY_DIR}/fooConfig.cmakeINSTALL_DESTINATION lib/cmake/foo
)install(FILES${CMAKE_CURRENT_BINARY_DIR}/fooConfig.cmakeDESTINATION lib/cmake/foo
)

这样,其他项目就可以使用 find_package(foo) 来链接你的库了。


五、CMakePresets.json 的使用

CMakePresets.json 是 CMake 3.19+ 引入的新功能,可以统一预设构建参数:

{"version": 3,"configurePresets": [{"name": "release","generator": "Unix Makefiles","binaryDir": "${sourceDir}/build","cacheVariables": {"CMAKE_BUILD_TYPE": "Release","CMAKE_INSTALL_PREFIX": "${sourceDir}/install"}}],"buildPresets": [{ "name": "release", "configurePreset": "release" }]
}

使用方式非常简单:

cmake --preset=release                # 配置构建目录
cmake --build --preset=release       # 构建项目
cmake --install build                # 安装到 install/ 目录

实际终端输出如下所示:

$ cmake --preset=release
-- The CXX compiler identification is GNU 10.2.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /.../foo_project/build$ cmake --build --preset=release
[ 50%] Building CXX object CMakeFiles/foo.dir/src/foo.cpp.o
[100%] Linking CXX static library libfoo.a
[100%] Built target foo$ cmake --install build
-- Install configuration: "Release"
-- Installing: /.../foo_project/install/lib/libfoo.a
-- Installing: /.../foo_project/install/include/foo/foo.h
-- Installing: /.../foo_project/install/lib/cmake/foo/fooTargets.cmake
-- Installing: /.../foo_project/install/lib/cmake/foo/fooTargets-release.cmake
-- Installing: /.../foo_project/install/lib/cmake/foo/fooConfig.cmake

六、测试下游项目

在项目根目录下我们还设置了一个 test_app/ 目录,用于模拟一个使用 foo 库的下游项目。

// test_app/main.cpp
#include <foo/foo.h>int main() {foo::say_hello();return 0;
}
# test_app/CMakeLists.txt
cmake_minimum_required(VERSION 3.21)
project(test_app)find_package(foo REQUIRED PATHS ../install/lib/cmake/foo)  # 查找安装后的包add_executable(test_app main.cpp)
target_link_libraries(test_app PRIVATE foo::foo)  # 链接目标

构建和运行:

$ cmake -B build -DCMAKE_PREFIX_PATH=../install
-- The CXX compiler identification is GNU 10.2.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /.../test_app/build$ cmake --build build
[ 50%] Building CXX object CMakeFiles/test_app.dir/main.cpp.o
[100%] Linking CXX executable test_app
[100%] Built target test_app$ ./build/test_app
Hello from foo!

说明 foo 库已经成功安装并被下游项目引用。


七、安装生成的配置文件说明

安装完成后你会得到:

install/lib/cmake/foo/
├── fooConfig.cmake
├── fooTargets.cmake
└── fooTargets-release.cmake

这些文件让其他项目通过 find_package(foo REQUIRED PATHS ./install/lib/cmake/foo) 使用 foo::foo 目标,无需写死路径。

它们的作用分别是:

文件作用
fooConfig.cmake包配置入口文件,供 find_package() 加载
fooTargets.cmake定义导出的目标及其依赖
fooTargets-release.cmake定义 release 模式下库文件路径

八、总结

功能Modern CMake 命令说明
添加源码add_library() + target_sources()创建目标并声明源文件和头文件
设置包含路径target_include_directories()设置头文件查找路径
链接库target_link_libraries()连接依赖库
安装头文件install(FILE_SET ...)安装头文件并保持目录结构
导出配置install(EXPORT ...)安装 target 定义供 find_package() 使用
包配置文件configure_package_config_file()生成并安装 Config.cmake 供下游使用
使用 preset 构建cmake --preset=...快速构建统一配置
测试下游项目find_package() + target_link验证库是否被成功引用

通过 Modern CMake,构建脚本更可维护、更易复用、更标准化。

下一步,你可以尝试将自己的项目改造成 Modern CMake 风格,或基于本文的结构构建可复用的 C++ SDK。


📌 如需完整示例项目打包文件、测试程序或跨平台支持配置,欢迎留言交流!

http://www.dtcms.com/wzjs/362317.html

相关文章:

  • 制作官网哈尔滨企业网站seo
  • 手绘风格的网站网站群发软件
  • 安的网络网站建设公司网站建设平台
  • 做网站大流量百度广告商
  • 深圳网站建设培训班排名优化方法
  • 网站成品下载聚合广告联盟
  • 微信网站跳转链接怎么做北京seo专业团队
  • icp网站备案查询怎么免费创建自己的网站
  • 室内设计工作室旺道seo优化软件
  • 遵义做网站的公司靠谱的影视后期培训班
  • asp网站下用php栏目seo百家论坛
  • 医疗器械网站建设软文大全
  • 深圳定制建站写文的免费软件
  • 咸阳做网站开发公司网站排名软件包年
  • 杭州建设监理协会网站网站优化的方式有哪些
  • 群晖 做网站网络营销整合营销
  • 全屏网站怎么做的关键词排名优化营销推广
  • 农村电商平台网站设计思路有哪些软文营销的技巧有哪些?
  • 哪些网站被墙seo优化推广公司
  • 律师网站建设方案seo团队管理系统
  • 广州做网站海珠信科淘宝网店怎么运营起来
  • 做外贸翻译用那个网站品牌策划方案怎么写
  • 个人备案网站可以做商城展示简单的html网页制作
  • 济南企业型网站chatgpt 网址
  • 如何制作网站要钱吗沈阳百度推广排名优化
  • 网站建设公司合同灰色seo关键词排名
  • 网站建设都需要哪些书站长工具seo综合查询广告
  • 网页建站建设教程爱站网关键词搜索
  • wap网站定位重庆seo论坛
  • 外贸网站产品百度网盘登录入口网页版