mirror of
https://github.com/jackyzha0/quartz.git
synced 2025-12-24 13:24:05 -06:00
PUSH NOTE : 运行脚本生成过程.md
This commit is contained in:
parent
e94b8aef19
commit
f84ce1bdb5
163
content/Notes/OCPP/Everest/构建/运行脚本生成过程.md
Normal file
163
content/Notes/OCPP/Everest/构建/运行脚本生成过程.md
Normal file
@ -0,0 +1,163 @@
|
||||
---
|
||||
date: 2025-03-13 11:31
|
||||
updated: 2025-03-13 15:14
|
||||
tags:
|
||||
- Everest
|
||||
date updated: 2025-04-02 11:54
|
||||
link: "false"
|
||||
share: "true"
|
||||
---
|
||||
|
||||
以run-sil-ocpp.sh为例
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
A[CMakeLists.txt] -->|调用| B[generate_config_run_script函数]
|
||||
B -->|定义在| C[config-run-script.cmake]
|
||||
C -->|使用模板| D[run_template.sh.in]
|
||||
C -->|读取配置| E[config-sil-ocpp.yaml]
|
||||
D -->|变量替换| F[生成脚本]
|
||||
E -->|提供配置路径| F
|
||||
F -->|输出| G[run-sil-ocpp.sh]
|
||||
```
|
||||
|
||||
# 在CMakeLists.txt中调用生成函数
|
||||
|
||||
在checkout/everest-workspace/everest-core/config/CMakeLists.txt文件中,项目明确调用了生成脚本的函数:
|
||||
|
||||
```cmake
|
||||
generate_config_run_script(CONFIG sil)
|
||||
generate_config_run_script(CONFIG sil-two-evse)
|
||||
generate_config_run_script(CONFIG sil-ocpp) # 这一行负责生成run-sil-ocpp.sh
|
||||
generate_config_run_script(CONFIG sil-ocpp201)
|
||||
...
|
||||
```
|
||||
|
||||
# 生成函数的定义
|
||||
|
||||
该函数在checkout/everest-workspace/everest-core/cmake/config-run-script.cmake中定义:
|
||||
|
||||
```cmake
|
||||
function(generate_config_run_script)
|
||||
# 检查是否启用脚本生成
|
||||
if (NOT EVEREST_ENABLE_RUN_SCRIPT_GENERATION)
|
||||
return ()
|
||||
endif ()
|
||||
|
||||
# 定义参数
|
||||
set(options "")
|
||||
set(one_value_args
|
||||
CONFIG
|
||||
LOGGING_CONFIG
|
||||
OUTPUT
|
||||
)
|
||||
set(multi_value_args
|
||||
ADDITIONAL_ARGUMENTS
|
||||
)
|
||||
|
||||
# 解析参数
|
||||
cmake_parse_arguments(OPTNS "${options}" "${one_value_args}" "${multi_value_args}" ${ARGN})
|
||||
|
||||
# 检查必要参数
|
||||
if (NOT OPTNS_CONFIG)
|
||||
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} requires CONFIG parameter for the config name")
|
||||
endif()
|
||||
|
||||
# 设置配置文件路径
|
||||
set(CONFIG_FILE "${CMAKE_CURRENT_SOURCE_DIR}/config-${OPTNS_CONFIG}.yaml")
|
||||
if (NOT EXISTS ${CONFIG_FILE})
|
||||
message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION}: config file '${CONFIG_FILE}' does not exist")
|
||||
endif()
|
||||
|
||||
# 设置日志配置文件路径
|
||||
set(LOGGING_CONFIG_FILE "${EVEREST_CONFIG_ASSET_DIR}/logging.ini")
|
||||
if (OPTNS_LOGGING_CONFIG)
|
||||
set(LOGGING_CONFIG_FILE "${CMAKE_CURRENT_SOURCE_DIR}/${OPTNS_LOGGING_CONFIG}.ini")
|
||||
endif()
|
||||
|
||||
# 设置输出路径和文件名
|
||||
set(SCRIPT_OUTPUT_PATH "${CMAKE_BINARY_DIR}/run-scripts")
|
||||
set(SCRIPT_OUTPUT_FILE "${SCRIPT_OUTPUT_PATH}/run-${OPTNS_CONFIG}.sh")
|
||||
if (OPTNS_OUTPUT)
|
||||
set(SCRIPT_OUTPUT_FILE "${SCRIPT_OUTPUT_PATH}/run-${OPTNS_OUTPUT}.sh")
|
||||
endif()
|
||||
|
||||
# 设置其他必要变量
|
||||
set(LD_LIBRARY_VAR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}")
|
||||
set(PATH_VAR "${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}")
|
||||
|
||||
# 使用模板生成脚本
|
||||
configure_file("${EVEREST_CONFIG_ASSET_DIR}/run_template.sh.in" ${SCRIPT_OUTPUT_FILE})
|
||||
endfunction()
|
||||
```
|
||||
|
||||
# 脚本模板内容
|
||||
|
||||
模板文件checkout/everest-workspace/everest-core/cmake/assets/run_template.sh.in的内容如下:
|
||||
|
||||
```sh
|
||||
LD_LIBRARY_PATH=@LD_LIBRARY_VAR@:$LD_LIBRARY_PATH \
|
||||
PATH=@PATH_VAR@:$PATH \
|
||||
manager \
|
||||
--prefix @CMAKE_INSTALL_PREFIX@ \
|
||||
--conf @CONFIG_FILE@ \
|
||||
@ADDITIONAL_ARGUMENTS@
|
||||
$@
|
||||
```
|
||||
|
||||
# 变量替换过程
|
||||
|
||||
在CMake构建过程中,configure_file 命令会将模板中的变量替换为实际值:
|
||||
|
||||
- `@LD_LIBRARY_VAR@` → `${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}`
|
||||
- `@PATH_VAR@` → `${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}`
|
||||
- `@CMAKE_INSTALL_PREFIX@` → 安装前缀路径
|
||||
- `@CONFIG_FILE@` → 配置文件路径,即`${CMAKE_CURRENT_SOURCE_DIR}/config-sil-ocpp.yaml`
|
||||
- `@ADDITIONAL_ARGUMENTS@` → 其他附加参数
|
||||
|
||||
# 生成的脚本
|
||||
|
||||
最终,生成的run-sil-ocpp.sh脚本看起来类似这样:
|
||||
|
||||
```c
|
||||
LD_LIBRARY_PATH=/安装路径/lib:$LD_LIBRARY_PATH \
|
||||
PATH=/安装路径/bin:$PATH \
|
||||
manager \
|
||||
--prefix /安装路径 \
|
||||
--conf /源代码路径/config-sil-ocpp.yaml \
|
||||
<br/>
|
||||
$@
|
||||
```
|
||||
|
||||
当用户运行脚本时,它执行manager程序并传递配置文件路径:
|
||||
|
||||
# 配置文件示例
|
||||
|
||||
config-sil-ocpp.yaml文件包含了运行时所需的配置信息,例如:
|
||||
|
||||
```yaml
|
||||
active_modules:
|
||||
iso15118_charger:
|
||||
module: EvseV2G
|
||||
config_module:
|
||||
device: auto
|
||||
tls_security: allow
|
||||
connections:
|
||||
security:
|
||||
- module_id: evse_security
|
||||
implementation_id: main
|
||||
iso15118_car:
|
||||
module: PyEvJosev
|
||||
config_module:
|
||||
device: auto
|
||||
supported_ISO15118_2: true
|
||||
# 更多配置...
|
||||
```
|
||||
|
||||
# 总结
|
||||
|
||||
1. CMake构建系统在处理CMakeLists.txt文件时,发现调用了generate_config_run_script(CONFIG sil-ocpp)
|
||||
2. 执行该函数,找到对应的配置文件config-sil-ocpp.yaml
|
||||
3. 使用run_template.sh.in模板,将其中的变量替换为实际值
|
||||
4. 生成最终的run-sil-ocpp.sh脚本到构建目录
|
||||
5. 这个脚本在运行时会启动带有指定配置的应用程序,主要用于OCPP(开放充电点协议)功能的测试和模拟。
|
||||
Loading…
Reference in New Issue
Block a user