【问题标题】:Cmake add command line argument to binaryCmake将命令行参数添加到二进制文件
【发布时间】:2016-06-08 23:23:44
【问题描述】:

我通过 cmake/CMakeLists.txt 创建了一个二进制文件myBinary

我想在我的二进制文件中“包含”默认选项。

换句话说,即使我只是运行./myBinary,我也希望使用myBinary --option myopt 调用我的二进制文件

我该怎么做?

【问题讨论】:

  • 不是 CMake 的工作,请更改程序源代码以在缺少参数时设置默认值。

标签: linux binary cmake command-line-arguments


【解决方案1】:

CMake 没有内置支持你想做的事情。

一种解决方案是按照@Youka 所说的那样 - 更改程序的源代码。

我有时使用的另一个解决方案是自动生成执行可执行文件的脚本:

# Create startup script
MACRO(GEN_START_SCRIPT binName)
    # Generate content
    SET(fileContent
        "#!/bin/bash\n"
        "\n"
        "# This startup script is auto generated - do not modify!\n"
        "\n"
        "${binName} -a 23 -b 34 -c 976\n"
        "\n"
    )

    # Write to file
    SET(fileName ${CMAKE_CURRENT_BINARY_DIR}/${binName}.sh)
    FILE(WRITE ${fileName} ${fileContent})
ENDMACRO()

然后在定义你的可执行文件后调用宏:

ADD_EXECUTABLE(myBinary file1.c file.2)
GEN_START_SCRIPT(myBinary)

您当然可以在脚本中添加其他内容,例如环境变量等。

【讨论】:

  • 这是一个糟糕解决方案的糟糕实现。像这样的包装脚本在 OP 的情况下是没有意义的,因为可以更改代码。包装脚本不会转发额外的参数,而是使用来自PATH${binName}。即使需要包装脚本,也应该使用file(GENERATE),以便可以使用$<TARGET_FILE_NAME:...> 来容忍对OUTPUT_NAME 属性的更改。在这种情况下,您不需要宏,它本来应该是一个函数,不会破坏两个变量(fileNamefileContent)。
【解决方案2】:

如果您可以控制来源并且想要不同的默认行为...更改来源!

这绝不是构建系统问题(CMake 或其他)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    相关资源
    最近更新 更多