【问题标题】:Cmake passing argumentsCmake 传递参数
【发布时间】:2017-10-29 00:26:03
【问题描述】:

我有一个程序可以根据文件的签名识别文件。效果很好。但我是 C 新手,现在正试图让一个名为 CLion 的 IDE 工作。但是,我不知道如何向 cmake 添加命令参数 - 这样当我运行 main 并想要传递 gifFile 或 pdfFile 来识别时,我可以这样做。到目前为止,这是我的 cmake 代码。

cmake_minimum_required(VERSION 3.8)
project(Assignment6)

set(CMAKE_C_STANDARD 99)

set(SOURCE_FILES file_recognizer.c)
add_executable(Assignment6 ${SOURCE_FILES})

在命令行中类似于

gcc file_recognizer.c -o Assignment6

然后你说

./Assignment6 gifFile.gif

如何让 cmake 接受最后的参数“gifFile.gif”?

以下是我的主要功能,如有需要可以参考

int main(int argc, char const *argv[]) {
    FILE *yourFile;
    unsigned char *fileBytes, *fileType;
    long fileLength;

    fileLength = 10;
    if(argc != 2 || (yourFile = fopen(argv[1], "rb")) == NULL) {
        printf("Invalid Input\n");
        exit(-1);
    }

    fileBytes = readFile(yourFile, fileLength, fileBytes);
    determineFileType(fileBytes, fileType);

    return 0;
}

【问题讨论】:

    标签: cmake clion ansi-c


    【解决方案1】:

    这不是 CMake 旨在做的事情。我的意思是,它可以通过 CMake 实现:

    add_custom_command(OUTPUT output COMMAND Assignment6 ARGS gifFile.gif)
    

    但听起来您想要做的并不是构建过程的一部分,CMake 只是构建、测试和打包软件,而不是运行它。

    由于您使用的是 CLion,因此最好在 CLion 中设置程序参数以进行调试。

    点击这里:

    并在此处输入您的参数:

    【讨论】:

    • 谢谢。这适用于传递参数,但由于某种原因,它现在位于 argv[0] 处。必须与它在我的另一台机器上与 gcc 的编译方式有关。不过感谢提示!
    猜你喜欢
    • 2018-03-01
    • 2020-10-11
    • 2017-04-15
    • 1970-01-01
    • 2011-12-29
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    相关资源
    最近更新 更多