# spark.framework **Repository Path**: zinface/spark.framework ## Basic Information - **Project Name**: spark.framework - **Description**: Spark Framework 是一个基于 CMake 的构建模块 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2024-03-27 - **Last Updated**: 2025-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: cmake-spark ## README # Spark Framework 的说明 Spark Framework 是一个基于 CMake 的构建模块,主要用于对 C/C++ 项目的构建能力进行进化。 目前,Spark Framework 支持的构建模式分为: - 被引用式: 通过在 git 仓库创建一个 `spark.cmake` 文件,描述可被引用的文件、或称为可共享的资源,进行向外提供引用。 有关引用点编写说明在 [SparkFramework-Usage.md](SparkFramework-Usage.md) 文档中。 简单说明,目前引用点可描述的资源有:**共享头文件目录**、**共享的源文件**、**描述的额外的共享点**、以及你可能想 **为目标应用一些额外的配置**: ```cmake # spark.cmake 文件内容 if(FRAMEWORK_WANT_INCLUDE) set(FRAMEWORK_INCLUDE_EXPORTS) # 共享的引用目录 set(FRAMEWORK_SOURCES_EXPORTS) # 共享的资源文件 set(FRAMEWORK_WITHGIT_EXPORTS # 使用的其它引用 # 一个完整的引用应该包含 ;[FEATURES;] 的形式 "公开的引用点仓库1;FEATURES;引用特性1;引用特性2" "公开的引用点仓库2;FEATURES;引用特性1;引用特性2" # ... ) # 对于拥有不同特性来启用引用的情况,可以用 if(feature_<特性名称>) 来判断是否启用 # 另外,对于一个引用点,可能同时被引用多个特性,所有变量从 set 改为 list(APPEND ) 来操作 if(feature_特性1) list(APPEND FRAMEWORK_INCLUDE_EXPORTS) # 共享的引用目录 list(APPEND FRAMEWORK_SOURCES_EXPORTS) # 共享的资源文件 list(APPEND FRAMEWORK_WITHGIT_EXPORTS # 使用的其它引用 # 一个完整的引用应该包含 ;[FEATURES;] 的形式 "公开的引用点仓库1;FEATURES;引用特性1;引用特性2" "公开的引用点仓库2;FEATURES;引用特性1;引用特性2" # ... ) endif(feature_特性1) # 您也可以为正使用此引用的目标配置一些 CMake 属性,以改变行为 # 由于目标是以变量形式传递下来,那么在这里使用 ${} 来引用变量 set_target_properties(${FRAMEWORK_TARGET} PROPERTIES WIN32_EXECUTABLE ON) return() endif(FRAMEWORK_WANT_INCLUDE) ``` 以上只是一种常规描写方式,对于一个项目想要作为引用点来讲的话,只需要在仓库中提供一个 spark.cmake 文件即可。 需要认真思考 **想引用** 到你的项目中时,你预期引用到的内容是什么,或者你的目标 **经过这个引用点** 后,需要有什么变化等。 - 引用模式: 通过 `spark_framework_include[with_git]` 来描述要使用的其它引用点内容的位置。 当使用本地引用点时,使用 `spark_framework_include` 宏来完成: ```cmake spark_framework_include( /path/to/spark.cmake) ``` 当使用远程引用点时,使用 `spark_framework_include_with_git` 宏来完成: ```cmake spark_framework_include_with_git( [FEATURES ...]) ``` 有关使用引用点的说明在 [SparkFramework-Usage.md](SparkFramework-Usage.md) 文档中。 简单说明,直接将你的目标传递到引用点上,在经过引用点后,引用点会为你的目标配置所有特性相关的内容。 ```cmake # 1.先创建一个目标 add_executable(template src/main.cpp) # 2.使用一个远程引用点, spark_framework_include_with_git(template https://gitee.com/spark-framework-libs/spark-framework-features FEATURES version dbusutil) ``` 以上只是一种常规使用方式,你的 `template` 目标在经过这个引用点时,会触发两种特性: - version: 启用 cmake 化版本号,你的这个目标源文件可以通过 `#include "version.h"` 引入一个资源,里面提供的版本号信息。 - dbusutil: 启用 dbus 的支持,你的这个目标源文件可以通过 `#include "dbusutil.h"` 引入一个资源,里面提供的 dbus 的支持, 并默认提供了 `showFileLocation` 接口。 对于一些额外的引用与引用点场景,已经支持间接引用: - 引用点 X:这个引用描述了 A 的引用,同时描述了 B 的引用,同时描述了 C 的引用。 - 引用点 A:提供某种或某些能力 - 引用点 B:提供某种或某些能力 - 引用点 C:提供某种或某些能力 当使用引用点 X 时,会自动包含 A、B、C 的所有内容,也就是合并所有引用,而不是一个一个地包含。 除了部分 CMake 低版本情况下可能会有兼容性问题,其余应会按预期完成执行。