【问题标题】:Command line arguments with makefile带有 makefile 的命令行参数
【发布时间】:2016-02-26 11:21:58
【问题描述】:

编辑:

这与其他问题不同,因为我放在 unix 命令行上的变量将是“p2 -s input.txt”,我的 main.c 文件将在其中操作它们。

所以通常在使用命令行参数时,我的代码会是这样的:

int main(int argc, char argv[])
{ 
     printf("%d", argc);
     return 0;
}

我将如何使用 makefile 执行此操作?

【问题讨论】:

  • 你想用你的makefile做什么?
  • make 的参数用于确定要构建的目标。
  • 基本上我想输入“p2 -s input.txt”我知道这是一个完全不同的程序我只是想了解它背后的基本思想

标签: c makefile command-line-arguments


【解决方案1】:

GNU make 不是 C。
传递参数不能以相同的方式完成。

如果您想为您的 makefile 提供自定义参数,
你可以考虑通过变量赋值来做到这一点。

例如,使用下面的makefile:

all:
    @echo $(FOO)

可以像这样通过命令行调用:

make FOO="test"  

它将打印test


要考虑的其他选项:

  • 在调用 make 之前设置环境变量
  • 依靠 Makefile 中指定的不同目标

【讨论】:

  • 我将程序称为 p2。当我想运行程序时,我会输入“p2 Hi”,它应该打印 2。我想将“p2”和“Hi”的参数传递给我的 main.c 程序
  • @John 也许我误解了。所以你想让你的makefile接受参数,然后把这些参数传递给你的C程序?没有什么能阻止您在“制定”规则的正文中转发这些论点。您可以调用自己的程序,而不是上面显示的 echo 命令。
  • 抱歉,这很难用语言来解释,哈哈。那我是否必须更改 main.c 的参数?我试图检查 -s 是否为 argv[1] (应该是),但无论我尝试 strcmp 还是 == 它仍然返回标志不存在。更令人困惑的部分是我还包含了一个测试打印语句—— printf("%s", argv[1]);它打印了 -s
【解决方案2】:

使用这样的生成文件:

COMMAND = echo 'You did not specify make COMMAND="cmd 2 run" on the command line'

all:
    ${COMMAND}

现在,当您运行make COMMAND="p2 Hi" 时,您将运行该命令并获得相应的输出。如果您忘记指定COMMAND="something or another",那么您将获得一个合适的内存慢跑者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 2013-02-22
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2015-07-08
    相关资源
    最近更新 更多