change loading method and use powershell to build

This commit is contained in:
Zhanpeng Yang 2024-09-25 16:09:33 +08:00
parent 042cea2fb5
commit ef7318c847
9 changed files with 105 additions and 117 deletions

1
.gitignore vendored
View File

@ -1,2 +1,3 @@
build
release
tmp

View File

@ -1,6 +1,20 @@
# 更新日志
## v0.0.2.20240925_alpha
**在之前写的代码基础上正式建立此项目文件,后续将在此项目上进行迭代开发**
### 🔄Changed
- 加载配置文件变更为绝对路径会自动寻找exe文件所在文件夹的上层文件夹下的"configs/data_collection_configs.yaml"文件作为配置文件
### 🚀Refactored
- 将.bat文件修改为.ps1文件即默认使用powershell编译
- 实现"./run.ps1"直接运行build文件夹下的所有exe文件
- 实现"./run.ps1 b"重新编译并随后直接运行build文件夹下的所有exe文件
- 实现"./run.ps1 p"打包编译好的文件,注意要先执行编译才能打包, 注意在CmakeList.txt文件中修改版本号
## v0.0.1.20240912_alpha
**在之前写的代码基础上正式建立此项目文件,后续将在此项目上进行迭代开发**

View File

@ -7,10 +7,10 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
# C++20
set(CMAKE_CXX_STANDARD 20)
set(PROJ_NAME "TEST_Specim_Save")
set(PROJ_NAME "SEMS-data-collection")
set(PROJ_VERSION_MAJOR 0)
set(PROJ_VERSION_MINOR 0)
set(PROJ_VERSION_PATCH 1)
set(PROJ_VERSION_PATCH 2.20240927_alpha)
#HelloWorld
project(${PROJ_NAME})

View File

@ -3,23 +3,14 @@
注意检查上层目录是否含有CompliteEnv文件夹, 以及其中依赖的编译环境
# 功能
实现了测试光谱相机缓存机制的代码确定了Specim FX10e相机默认的缓冲区是500帧图片
光谱数据调取路径是,我们自己写的程序->官方驱动->通过网线从相机获取
- 当程序读取速度大于拍摄速度时,程序会等拍摄完一帧再返回。
- 当程序读取速度小于拍摄速度时驱动会缓存没有及时调取的图像然后按先进先出的原则返回最旧的一帧图像。当缓存大于500帧时驱动会清除所有缓存然后重新进行缓存
因此如果想每时每刻都获取最新的一帧图像只需要将缓冲区设置为2经过测试设置为1会卡死应该是不能同时操作同一个内存地址
- 使用`/configs/data_collection_configs.yaml`文件中的参数,配置光谱相机,并持续采集数据保存到指定文件夹
# 命令手册
- run rb : ReBuild 从头编译的命令, 适用于从来没编译过或修改CMakeLists文件后重新编译。会先删除build文件夹再重新编译
- run rb e : ReBuild Execute 从头编译并执行
- run.bat b : Build 编译适用于已生成过Makefile且CMakeLists.txt没有变化仅仅需要重新编译生成exe文件
- run.bat b e : Build Execute 从头编译并执行
- run.bat e : Execute 运行可执行文件
- run.bat c : Clear 清理Build文件夹
- run.bat p : Pack 打包项目
- ./run.ps1 : 执行build文件夹下的所有exe可执行程序
- ./run.ps1 b : ReBuild 从头编译的命令, 适用于从来没编译过或修改CMakeLists文件后重新编译。会先删除build文件夹再重新编译
- ./run.ps1 p : Pack 打包项目,需先用`./run.ps1 b`编译然后修改CMakeLists文件中的版本号
获取最新版本
http://10.8.8.8:3000/api/v1/repos/zhanpeng/SEMS-data-collection/releases/latest?token=e9aaae4b5f7756d0a2977764dbcbdfeb68bb2e13

100
run.bat
View File

@ -1,100 +0,0 @@
@echo off
@REM @REM 检查环境变量
call:check_path
@REM 判断第一个参数是否为rb
if "%1"=="rb" (
@REM 判断是否存在build文件夹若存在就删除
call:remove_build_dir
@REM 编译生成Makefile
cmake -B build -G "MinGW Makefiles"
@REM 编译生成可执行程序
cmake --build build
@REM 判断第二个参数是否为e如果有代表要执行编译好的可执行程序
if "%2"=="e" (
call:run_build_exe
)
)
@REM run.bat b : Build 编译适用于已生成过Makefile且CMakeLists.txt没有变化仅仅需要重新编译生成exe文件
@REM run.bat b e : Build Execute 从头编译并执行
@REM 判断第一个参数是否为rb
if "%1"=="b" (
@REM 编译生成可执行程序
cmake --build build
@REM 判断第二个参数是否为e如果有代表要执行编译好的可执行程序
if "%2"=="e" (
call:run_build_exe
)
)
@REM run.bat e : Execute 运行可执行文件
if "%1"=="e" (
call:run_build_exe
)
@REM run.bat c : Clear 清理Build文件夹
if "%1"=="c" (
call:remove_build_dir
)
@REM run.bat e : 打包
if "%1"=="p" (
@REM 判断是否存在build文件夹若存在就删除
call:remove_build_dir
@REM 编译生成Makefile
cmake -B build -G "MinGW Makefiles"
@REM 编译生成可执行程序
cmake --build build
@REM 打包为安装包
cmake --build build --target package
)
@REM 在执行完过程后加上goto :eof跳到文件尾, 避免执行到文件结束才返回
goto :eof
:check_path
@REM 判断环境变量中是否存在编译所需要的文件夹,如果没有,就添加到环境变量
set Nowdir=%cd%
cd ../CompliteEnv
call set_temp_env.bat
cd %Nowdir%
set PATH=C:\Program Files\Common Files\Pleora\eBUS SDK;%cd%\lib;%PATH%
echo PATH is seted to %PATH%
goto:eof
:run_build_exe
echo Starting to run EXE files in build folder...
@REM 遍历build下的exe文件并一个一个的执行其实编译后只有一个可执行文件
for /f %%i in ('dir /b build\*.exe') do .\build\%%i
echo Stoped runing EXE files...
goto:eof
:remove_build_dir
if exist build (
rd /s /Q build
echo "The build folder has been removed."
) else (
echo "The build folder does not exist."
)
goto:eof

67
run.ps1 Normal file
View File

@ -0,0 +1,67 @@
Param($cmd)
$Env:PATH="C:\Program Files\Common Files\Pleora\eBUS SDK;" #开发光谱相机所必需的路径
$Env:PATH+="C:\Program Files\Git\cmd;" #开发所需的git命令的路径
$Env:PATH+=(Resolve-Path ../CompliteEnv/mingw64/bin).path+";" #g++所在路径
$Env:PATH+=(Resolve-Path ../CompliteEnv/CMake/bin).path+";" #cmake所在路径
$Env:PATH+=(Resolve-Path ./lib).path+";" #本项目所需的动态链接库所在路径
Write-Host "PATH is set to $Env:PATH"
function Remove-Build-Dir
{
If(Test-Path "build"){ #如果当前目录下build文件夹存在
Remove-Item -Path "build" -Recurse #递归阐述build文件夹
}
}
function ReBuild-Target
{
# 编译生成Makefile
cmake -B build -G "MinGW Makefiles"
# 编译生成可执行程序
cmake --build build
}
function Run-All-Exe
{
$exeFiles= Get-ChildItem -Path "build" -Filter *.exe
Write-Host "Exe Files: $exeFiles"
ForEach($exeFile in $exeFiles){
Write-Host "Processing file: $($exeFile.FullName)"
Start-Process -Wait -FilePath $exeFile.FullName -PassThru
}
}
If($cmd -eq "b"){
Write-Host "Rebuilding all targets..."
Remove-Build-Dir
ReBuild-Target
Run-All-Exe
}
If($cmd -eq "p"){
Write-Host "Packing all targets..."
cmake --build build --target package
}
If([String]::IsNullOrEmpty($cmd)){ #如果没有任何参数就运行所有exe
Run-All-Exe
}

View File

@ -14,7 +14,7 @@
#include <fstream>
#include "visible_light_camera.h"
#include<windows.h>
#include <chrono>
@ -64,7 +64,22 @@ int check_update_file_handle(std::string save_dir, std::ofstream &h_raw_spectal_
int main()
{
// std::cout << "Hello" << std::endl;
YAML::Node configs = YAML::LoadFile("./configs/configs.yaml");
char szPath[512] = {0};
GetModuleFileName(NULL, szPath, sizeof(szPath)-1);
std::string exe_dir(szPath);
//这里返回的是exe文件的完整路径包括文件名所以下面执行两边就是先取出exe文件名再去除exe所在文件夹
//即实现找到exe所在文件夹的上层文件夹的绝对路径
size_t lastSlashIndex = exe_dir.find_last_of('\\');
exe_dir=exe_dir.substr(0,lastSlashIndex); //+1是为了也包含最后一个反斜杠
lastSlashIndex = exe_dir.find_last_of('\\');
exe_dir=exe_dir.substr(0,lastSlashIndex+1); //+1是为了也包含最后一个反斜杠
std::cout << "Configs file path is " <<exe_dir+"configs\\data_collection_configs.yaml"<< std::endl;
YAML::Node configs = YAML::LoadFile(exe_dir+"configs\\data_collection_configs.yaml");
SpectralCamera *spec_camera = new SpectralCamera();
spec_camera->listDevices();