【问题标题】:How to pass argument from Makefile to a program? [closed]如何将参数从 Makefile 传递给程序? [关闭]
【发布时间】:2018-06-23 23:41:33
【问题描述】:

我想将 Makefile 的目录传递给函数。

例如:

生成文件

$(DIR) = makefile directory

程序

int main(int argc,char argv[]) char directory = argv[1]

我该怎么做?

编辑 澄清。我希望我的应用程序在我编译它的目录之外工作。

【问题讨论】:

  • 不清楚你想做什么。 makefile 通常用于编译程序,而不是运行它。
  • makefile 控制编译,而参数在运行时传递。你到底想达到什么目标?
  • @Barmar 我使用很多 makefile 来构建运行程序。例如,自动化测试。
  • 你的程序没有编译:argv 是一个指向char...
  • @kebs 这就是我说“通常”的原因。我认为 OP 比做类似的事情更有可能感到困惑。

标签: c makefile directory parameter-passing


【解决方案1】:

在编译时传递符号是使用 -D 选项完成的 (示例是 C++,但您可以轻松转换为 C)。你可以只定义符号,也可以给它一个值(这就是你想要的)。

DIR=$(shell pwd)
mytarget: 
    @echo "DIRECTORY=$(DIR)"
    $(CXX) mysource.cpp -D"DIRECTORY=$(DIR)" -o mysource

然后,在您的源文件中,符号DIRECTORY 将保存路径。要检查这一点,您需要一个额外的技巧(称为“双重扩展”):

#define STR1(x)  #x
#define STR(x)  STR1(x)
#include <iostream>
int main()
{
    std::cout << "directory is " << STR(DIRECTORY) << "\n";
}

您可以查看this similar questionsee here 关于 D 标志的信息。

【讨论】:

  • STR(DIRECTORY) 返回“1”
  • 什么意思?究竟打印了什么?在 makefile 中添加 echo 行以查看符号包含的内容”。
  • @echo DIRECTORY 打印“DIRECTORY”
  • @echo $(shell pwd) 打印“/home/user/asq”
  • STR(DIRECTORY) in main() 品脱“1”
【解决方案2】:

如果您需要传递的目录是静态的(即始终相同),您可以使用-D C 编译器选项:

cc -DDIRECTORY=/home/user/...

然后您可以在您的 C 源代码中使用DIRECTORY

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多