您如何编写一个 cmake.yml 允许您在 GitHub 上查看文件?
How do you write a cmake.yml which allows you to review a file on GitHub?
我编写了一个程序,它接受一个包含输入文件的命令行参数,并通过一些算法运行它并创建一个包含结果的 txt 文件。
我需要做的是使用 GitHub 操作查看文件。我的程序使用 GitHub 操作构建,我无法查看输出文件。
目前我的 cmake.yml 是这样设置的:
on:
push:
branches: [ main ]
env:
BUILD_TYPE: Debug
file's
TEST_EXE: 22s_pa01_nicandpaige
INPUT_FILE: input/input.txt
OUTPUT_FILE: output/test-highvalue.txt output/test-custom.txt. output/test-bruteforce
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- uses: actions/checkout@v2
- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
- name: Execute Project
working-directory: ${{github.workspace}}/build
run: ${{github.workspace}}/build/${{env.TEST_EXE}} ${{env.INPUT_FILE}} ${{env.OUTPUT_FILE}}
- name: Upload output files to GitHub so they can be reviewed
uses: actions/upload-artifact@v2
with:
name: project_output
path: ${{github.workspace}}/build/output
关于我在程序中编写文本文件的方式:
std:: ofstream myfile;
myfile.open ("../output/test-highvalue.txt");
for (auto & i : x){
myfile << i.getId();
myfile << " ";
myfile << i.getValue();
totalValue += i.getValue();
myfile << " ";
myfile << i.getLength();
myfile << " ";
myfile << i.getH();
myfile << std:: endl;
}
上面的以下代码是跨三个不同的 类 复制的,并在 main 中调用。
至于我们如何调用输入文件:
std::vector<paintingData> read_paintings(char* arg){
std::ifstream inFS(arg);
if(!inFS.is_open()){
std::cout << "Failed to open " << arg << std::endl;
return std::vector<paintingData>();
}
这个函数比这个更广泛,但它在 main 中被调用,数据被传递给必要的算法。
虽然它正在构建,但当我仔细查看构建时,我收到以下消息
Please execute this program with the input file name included as an argument.
和
Warning: No files were found with the provided path: /home/runner/work/22s-pa01-nicandpaige/22s-pa01-nicandpaige/build/output. No artifacts will be uploaded.
我不确定问题到底出在哪里,因为这是我第一次写 cmake.yml,我遇到了障碍。
任何指导将不胜感激。
这似乎是您的程序发出的错误消息:
Please execute this program with the input file name included as an argument.
我们不知道哪里出了问题,因为您没有显示发出此信号的程序部分。
你说
I have written a program which takes in an single command line argument
但是你给出了多个参数:
${{env.INPUT_FILE}} ${{env.OUTPUT_FILE}}
你显示代码行
myfile.open ("../output/test-highvalue.txt");
您的工作目录是 ${{github.workspace}}/build
,因此您的输出目录是 ${{github.workspace}}/output
,而不是 ${{github.workspace}}/build/output
。
您没有说明如何创建 output
目录。
总结一下:有一些可疑的东西,但你没有提供足够的信息让我们真正找出问题所在。
我编写了一个程序,它接受一个包含输入文件的命令行参数,并通过一些算法运行它并创建一个包含结果的 txt 文件。
我需要做的是使用 GitHub 操作查看文件。我的程序使用 GitHub 操作构建,我无法查看输出文件。
目前我的 cmake.yml 是这样设置的:
on:
push:
branches: [ main ]
env:
BUILD_TYPE: Debug
file's
TEST_EXE: 22s_pa01_nicandpaige
INPUT_FILE: input/input.txt
OUTPUT_FILE: output/test-highvalue.txt output/test-custom.txt. output/test-bruteforce
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- uses: actions/checkout@v2
- name: Configure CMake
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}}
- name: Build
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}}
- name: Execute Project
working-directory: ${{github.workspace}}/build
run: ${{github.workspace}}/build/${{env.TEST_EXE}} ${{env.INPUT_FILE}} ${{env.OUTPUT_FILE}}
- name: Upload output files to GitHub so they can be reviewed
uses: actions/upload-artifact@v2
with:
name: project_output
path: ${{github.workspace}}/build/output
关于我在程序中编写文本文件的方式:
std:: ofstream myfile;
myfile.open ("../output/test-highvalue.txt");
for (auto & i : x){
myfile << i.getId();
myfile << " ";
myfile << i.getValue();
totalValue += i.getValue();
myfile << " ";
myfile << i.getLength();
myfile << " ";
myfile << i.getH();
myfile << std:: endl;
}
上面的以下代码是跨三个不同的 类 复制的,并在 main 中调用。
至于我们如何调用输入文件:
std::vector<paintingData> read_paintings(char* arg){
std::ifstream inFS(arg);
if(!inFS.is_open()){
std::cout << "Failed to open " << arg << std::endl;
return std::vector<paintingData>();
}
这个函数比这个更广泛,但它在 main 中被调用,数据被传递给必要的算法。
虽然它正在构建,但当我仔细查看构建时,我收到以下消息
Please execute this program with the input file name included as an argument.
和
Warning: No files were found with the provided path: /home/runner/work/22s-pa01-nicandpaige/22s-pa01-nicandpaige/build/output. No artifacts will be uploaded.
我不确定问题到底出在哪里,因为这是我第一次写 cmake.yml,我遇到了障碍。
任何指导将不胜感激。
这似乎是您的程序发出的错误消息:
Please execute this program with the input file name included as an argument.
我们不知道哪里出了问题,因为您没有显示发出此信号的程序部分。
你说
I have written a program which takes in an single command line argument
但是你给出了多个参数:
${{env.INPUT_FILE}} ${{env.OUTPUT_FILE}}
你显示代码行
myfile.open ("../output/test-highvalue.txt");
您的工作目录是 ${{github.workspace}}/build
,因此您的输出目录是 ${{github.workspace}}/output
,而不是 ${{github.workspace}}/build/output
。
您没有说明如何创建 output
目录。
总结一下:有一些可疑的东西,但你没有提供足够的信息让我们真正找出问题所在。