您如何编写一个 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 目录。

总结一下:有一些可疑的东西,但你没有提供足够的信息让我们真正找出问题所在。