网站建设做什么会计科目自己有网站怎么做点卡?

张小明 2026/1/8 16:17:45
网站建设做什么会计科目,自己有网站怎么做点卡?,建设网证书查询平台官网,利用wix建手机网站多目录构建网络 - 将多个CMakeLists.txt组织成可控的构建系统 #x1f4da; 课程目标 本课程将学习如何#xff1a; 使用 add_subdirectory() 组织多个子目录管理大型项目的构建依赖关系控制哪些模块被构建#xff08;条件构建#xff09;在父子目录间传递变量和选项理解CM…多目录构建网络 - 将多个CMakeLists.txt组织成可控的构建系统 课程目标本课程将学习如何使用add_subdirectory()组织多个子目录管理大型项目的构建依赖关系控制哪些模块被构建条件构建在父子目录间传递变量和选项理解CMake的作用域和变量可见性构建一个可扩展的、模块化的CMake项目结构 项目结构06-多目录构建网络/ ├── CMakeLists.txt # 主CMakeLists.txt根配置 ├── core/ # 核心库模块 │ ├── CMakeLists.txt │ ├── core_lib.h │ └── core_lib.cpp ├── utils/ # 工具库模块可选 │ ├── CMakeLists.txt │ ├── utils_lib.h │ └── utils_lib.cpp ├── app/ # 主应用程序 │ ├── CMakeLists.txt │ └── main.cpp ├── examples/ # 示例程序可选 │ ├── CMakeLists.txt │ ├── example1.cpp │ └── example2.cpp └── tests/ # 测试程序可选 ├── CMakeLists.txt └── test_core.cpp 核心概念详解1. add_subdirectory() - 添加子目录作用将子目录添加到构建系统中CMake会处理子目录中的CMakeLists.txt。语法add_subdirectory(子目录路径)示例# 添加核心库子目录 add_subdirectory(core) # 条件添加工具库子目录 if(BUILD_UTILS) add_subdirectory(utils) endif()要点子目录路径相对于当前CMakeLists.txt所在目录子目录中必须有CMakeLists.txt文件CMake会按照add_subdirectory()的顺序处理子目录子目录中创建的目标target在父目录中可见2. 变量作用域和传递2.1 变量作用域规则重要规则父目录的变量对子目录可见在父CMakeLists.txt中定义的变量子目录可以直接使用子目录的变量对父目录不可见子目录中定义的变量不会影响父目录使用set(... PARENT_SCOPE)可以修改父目录的变量示例# 父目录 CMakeLists.txt set(PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) set(BUILD_TESTS ON) add_subdirectory(core) # 子目录可以使用 PROJECT_ROOT 和 BUILD_TESTS # 子目录 core/CMakeLists.txt message(STATUS 项目根目录: ${PROJECT_ROOT}) # ✓ 可以使用 message(STATUS 构建测试: ${BUILD_TESTS}) # ✓ 可以使用 set(LOCAL_VAR 只在core目录中可见) # 父目录看不到这个变量2.2 使用 PARENT_SCOPE 修改父目录变量# 子目录中 set(MY_VAR 新值 PARENT_SCOPE) # 修改父目录的变量3. 依赖关系管理3.1 目标Target的可见性关键点子目录中创建的目标add_library(),add_executable()在父目录和其他子目录中自动可见可以在任何地方使用target_link_libraries()链接这些目标示例# core/CMakeLists.txt add_library(core_lib STATIC core_lib.cpp) # 创建目标 # utils/CMakeLists.txt add_library(utils_lib STATIC utils_lib.cpp) target_link_libraries(utils_lib PUBLIC core_lib) # ✓ 可以链接core_lib # app/CMakeLists.txt add_executable(main_app main.cpp) target_link_libraries(main_app core_lib utils_lib) # ✓ 可以链接两个库3.2 PUBLIC/PRIVATE/INTERFACE 的传递性PUBLIC 的传递性# core/CMakeLists.txt target_include_directories(core_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) # PUBLIC 表示core_lib需要这个目录链接core_lib的目标也需要 # utils/CMakeLists.txt target_link_libraries(utils_lib PUBLIC core_lib) # 因为core_lib使用了PUBLIC包含目录utils_lib会自动获得这个包含目录 # app/CMakeLists.txt target_link_libraries(main_app core_lib) # main_app也会自动获得core_lib的PUBLIC包含目录依赖链core_lib (PUBLIC包含目录) ↓ utils_lib (链接core_lib) ↓ main_app (链接core_lib和utils_lib)4. 条件构建4.1 使用 option() 定义选项# 主CMakeLists.txt option(BUILD_TESTS 构建测试程序 OFF) option(BUILD_EXAMPLES 构建示例程序 ON) option(BUILD_UTILS 构建工具库 ON)4.2 条件添加子目录# 根据选项决定是否添加子目录 if(BUILD_TESTS) enable_testing() add_subdirectory(tests) endif() if(BUILD_EXAMPLES) add_subdirectory(examples) endif()4.3 条件链接库# app/CMakeLists.txt target_link_libraries(main_app core_lib) # 如果工具库被构建则链接它 if(BUILD_UTILS) target_link_libraries(main_app utils_lib) target_compile_definitions(main_app PRIVATE BUILD_UTILS_LIB) endif()5. 项目组织最佳实践5.1 目录结构建议项目根目录/ ├── CMakeLists.txt # 主配置 ├── include/ # 公共头文件可选 ├── src/ # 源代码可选或直接在子目录 ├── libs/ # 第三方库可选 │ ├── lib1/ │ └── lib2/ ├── apps/ # 应用程序 │ ├── app1/ │ └── app2/ ├── tests/ # 测试 └── docs/ # 文档5.2 每个模块的CMakeLists.txt结构# 1. 收集源文件 set(MODULE_SOURCES file1.cpp file2.cpp ) # 2. 创建目标库或可执行文件 add_library(module_name STATIC ${MODULE_SOURCES}) # 3. 设置包含目录 target_include_directories(module_name PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ) # 4. 链接依赖 target_link_libraries(module_name PUBLIC dependency1 dependency2 ) # 5. 安装规则可选 install(TARGETS module_name ...)️ 实践步骤步骤1查看项目结构cd06-多目录构建网络 tree /F# Windows# 或tree# Linux/Mac步骤2创建构建目录并配置默认选项mkdirbuildcdbuild cmake..观察输出查看各个模块的配置消息注意哪些子目录被添加了查看依赖关系步骤3编译项目cmake --build.观察各个模块的编译顺序依赖关系如何影响编译顺序步骤4运行程序# Windows.\Debug\main_app.exe# 或.\main_app.exe# Linux/Mac./main_app步骤5尝试不同的构建选项5.1 禁用工具库cd..rm-rf build# 或 rmdir /s /q build (Windows)mkdirbuildcdbuild cmake -DBUILD_UTILSOFF..cmake --build..\main_app.exe观察utils目录不会被处理main_app仍然可以编译因为使用了条件编译5.2 只构建核心库和应用程序cmake -DBUILD_UTILSOFF -DBUILD_EXAMPLESOFF -DBUILD_TESTSOFF..cmake --build.5.3 构建所有模块cmake -DBUILD_UTILSON -DBUILD_EXAMPLESON -DBUILD_TESTSON..cmake --build.步骤6查看构建的依赖关系图# 生成依赖关系图需要安装Graphvizcmake --graphvizgraph.dot..dot -Tpng graph.dot -o graph.png CMakeLists.txt 逐行解析主CMakeLists.txt# 第1-2行版本要求 cmake_minimum_required(VERSION 3.10) # 第5行项目定义 project(MultiDirectoryProject VERSION 1.0.0 LANGUAGES CXX) # 第8-9行全局C标准设置 set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 这些设置会传递给所有子目录 # 第12-15行定义全局选项 option(BUILD_TESTS 构建测试程序 OFF) option(BUILD_EXAMPLES 构建示例程序 ON) option(BUILD_UTILS 构建工具库 ON) # 这些选项可以在命令行通过 -D 参数修改 # 第18行定义全局变量 set(PROJECT_ROOT ${CMAKE_CURRENT_SOURCE_DIR}) # 子目录可以使用这个变量 # 第32行无条件添加核心库 add_subdirectory(core) # core目录必须被构建 # 第35-38行条件添加工具库 if(BUILD_UTILS) add_subdirectory(utils) endif() # 第41行添加应用程序 add_subdirectory(app) # 第44-47行条件添加示例程序 if(BUILD_EXAMPLES) add_subdirectory(examples) endif() # 第50-54行条件添加测试 if(BUILD_TESTS) enable_testing() # 启用CTest add_subdirectory(tests) endif()core/CMakeLists.txt# 第7-9行收集源文件 set(CORE_SOURCES core_lib.cpp ) # 第12行创建静态库 add_library(core_lib STATIC ${CORE_SOURCES}) # 这个目标在整个项目中可见 # 第15-18行设置包含目录PUBLIC target_include_directories(core_lib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} # core目录 ${PROJECT_ROOT}/include # 使用父目录定义的变量 ) # PUBLIC表示链接core_lib的目标也会自动获得这些包含目录 # 第20-24行设置目标属性 set_target_properties(core_lib PROPERTIES VERSION ${PROJECT_VERSION} # 使用父目录定义的版本 SOVERSION 1 )utils/CMakeLists.txt# 第12行创建工具库 add_library(utils_lib STATIC ${UTILS_SOURCES}) # 第20行链接核心库 target_link_libraries(utils_lib PUBLIC core_lib) # PUBLIC表示链接utils_lib的目标也会自动链接core_lib # 并且会自动获得core_lib的PUBLIC包含目录app/CMakeLists.txt# 第29行创建可执行文件 add_executable(main_app ${APP_SOURCES}) # 第37-40行条件链接工具库 if(BUILD_UTILS) target_link_libraries(main_app utils_lib) target_compile_definitions(main_app PRIVATE BUILD_UTILS_LIB) # 定义宏让代码知道工具库可用 endif() 关键知识点总结1. add_subdirectory() 的行为自动处理子目录的CMakeLists.txt子目录中的目标自动可见变量从父目录传递到子目录单向可以条件添加子目录2. 变量作用域位置父目录变量子目录变量父目录✓ 可见✗ 不可见子目录✓ 可见✓ 可见3. 目标可见性所有子目录创建的目标在整个项目中可见可以在任何地方使用target_link_libraries()链接依赖关系由CMake自动解析4. PUBLIC/PRIVATE/INTERFACE 传递性PUBLIC当前目标需要依赖者也需要会传递PRIVATE只有当前目标需要不传递INTERFACE只有依赖者需要会传递但当前目标不需要5. 条件构建模式# 1. 定义选项 option(BUILD_MODULE 描述 ON) # 2. 条件添加子目录 if(BUILD_MODULE) add_subdirectory(module) endif() # 3. 条件链接在需要的地方 if(BUILD_MODULE) target_link_libraries(my_target module_lib) endif() 扩展练习练习1添加新模块尝试添加一个新模块network/包含network/CMakeLists.txtnetwork/network_lib.h和network/network_lib.cpp在主CMakeLists.txt中添加选项BUILD_NETWORK让应用程序可以选择性地链接网络库练习2创建模块化结构将项目重构为项目/ ├── CMakeLists.txt ├── libs/ │ ├── core/ │ ├── utils/ │ └── network/ ├── apps/ │ ├── app1/ │ └── app2/ └── tests/练习3使用函数简化重复代码创建一个函数来简化库的创建function(create_library lib_name) add_library(${lib_name} STATIC ${ARGN}) target_include_directories(${lib_name} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ) endfunction() # 使用 create_library(core_lib core_lib.cpp)练习4实现依赖检查添加依赖检查确保必需的模块被构建if(NOT BUILD_UTILS AND BUILD_EXAMPLES) message(FATAL_ERROR 示例程序需要工具库请启用BUILD_UTILS) endif()❓ 常见问题Q1: 子目录中的变量如何在父目录中使用A: 使用set(... PARENT_SCOPE)# 子目录中 set(MY_VAR 值 PARENT_SCOPE)Q2: 如何控制子目录的编译顺序A: CMake会根据依赖关系自动确定编译顺序。如果A依赖BB会先编译。Q3: 可以在子目录中修改父目录的选项吗A: 可以但不推荐。最好在根CMakeLists.txt中统一管理选项。Q4: 如何查看所有可用的目标A: 在CMakeLists.txt中添加get_property(_targets DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY BUILDSYSTEM_TARGETS) foreach(_target ${_targets}) message(STATUS 目标: ${_target}) endforeach()Q5: 如何跳过某个子目录的构建A: 使用条件判断if(NOT SKIP_MODULE) add_subdirectory(module) endif()Q6: 子目录中的CMakeLists.txt必须创建目标吗A: 不一定。子目录可以只设置变量、定义函数等不一定要创建目标。 实际应用场景场景1大型开源项目项目/ ├── CMakeLists.txt ├── src/ # 源代码 │ ├── core/ │ ├── gui/ │ └── network/ ├── tests/ # 测试 ├── examples/ # 示例 └── tools/ # 工具场景2多平台项目if(WIN32) add_subdirectory(platform/windows) elseif(UNIX) add_subdirectory(platform/linux) endif()场景3插件系统option(BUILD_PLUGIN_A 构建插件A ON) option(BUILD_PLUGIN_B 构建插件B OFF) if(BUILD_PLUGIN_A) add_subdirectory(plugins/plugin_a) endif() 下一步学习掌握了多目录构建后你可以继续学习CMake函数和宏创建可重用的构建逻辑FindPackage查找和使用第三方库CPack打包和分发项目CTest集成测试框架ExternalProject管理外部依赖 总结通过本课程你学会了✅ 使用add_subdirectory()组织多个CMakeLists.txt✅ 理解变量作用域和传递机制✅ 管理模块间的依赖关系✅ 实现条件构建和可选模块✅ 构建可扩展的、模块化的项目结构现在你已经掌握了将几十个小CMakeLists.txt组织成可控构建网络的核心技能祝你学习愉快
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做网站视频背景培训机构网站制作

Apache Web服务器:模块安装与SSL配置指南 在搭建和管理Web服务器时,Apache是一款被广泛使用的开源软件。它不仅功能强大,而且具有高度的可扩展性,通过安装额外的模块和配置SSL加密,能够满足不同网站的多样化需求。本文将详细介绍如何安装Apache的额外模块,以及如何使用S…

张小明 2026/1/7 8:48:54 网站建设

潜江网站搭建网站设计动图怎么建设

Elasticsearch 生产部署与运维全解析 1. 生产部署关键配置 1.1 主节点配置 在 Elasticsearch 中,需要指定三个专用主节点。此设置在 elasticsearch.yml 中进行配置: discovery.zen.ping.multicast.enabled: false discovery.zen.ping.unicast.hosts: ["host1&qu…

张小明 2026/1/7 22:41:09 网站建设

网站设置桌面快捷方式全国十大室内设计师

文章目录Git从入门到精通:核心操作冲突解决全指南(附实战代码)摘要一、Git 核心基础操作(日常高频)1.1 仓库初始化与克隆1.2 代码暂存与提交(本地仓库操作)1.3 版本查看与回退二、分支管理&…

张小明 2026/1/7 22:41:08 网站建设

网站如何在百度上搜索到建设简单企业网站

Windows应用开发:文件操作与存储管理 1. 定位要打开的文件 在开发过程中,有时需要定位并打开特定的文件。以TodoList应用为例, TodoList.pickFileAndOpenTask 方法用于实现这一功能,其代码与之前的文件保存选择器代码类似,不过这次配置选择器对象以选择扩展名为 .tod…

张小明 2026/1/7 22:41:08 网站建设

产品介绍网站html源码网站用什么软件编写

kanass是一款国产开源免费、简洁易用的项目管理工具,包含项目管理、项目集管理、事项管理、版本管理、迭代管理、计划管理等相关模块。工具功能完善,用户界面友好,操作流畅。本文主要介绍项目集管理。1、添加项目集1.1 添加项目集点击项目集-…

张小明 2026/1/7 22:41:09 网站建设

如何购买域名建网站青岛一点两区救治医院

第一章:Open-AutoGLM智能体电脑的诞生背景与演进路径随着大语言模型技术的飞速发展,传统静态交互式AI系统已难以满足复杂任务自动化的需求。在此背景下,Open-AutoGLM智能体电脑应运而生,旨在构建一个具备自主感知、规划、执行与反…

张小明 2026/1/7 22:41:10 网站建设