【问题标题】:Using "make" C Programming (Learn C the Hard Way)使用“make”C 编程(艰难地学习 C)
【发布时间】:2013-03-24 18:45:59
【问题描述】:



我正在通过“Learn C the Hard Way”学习 C 编程。我目前正在进行练习 1,可以在这里找到:http://c.learncodethehardway.org/book/ex1.html

我了解所涵盖的概念,但不了解编译过程。在命令行中使用“make”命令时,为什么会这样:

$ make ex1

这不起作用:

$ make ex1.c

实际上直到一分钟前我才运行第二个命令。不过我最终想通了。在我这样做之前,我一直收到此错误消息:

make: nothing to be done for 'ex1.c'

虽然这只是技术性问题,但我仍然想知道发生了什么。谢谢:)

【问题讨论】:

  • 不是 gcc ex1.c -o ex1 吗?因为 gcc 是 C 编译器。
  • 这个问题更多是关于make程序而不是C语言。
  • 抱歉,在以后的所有问题中都会记住这一点。这实际上是我在 stackoverflow 上的第一篇文章,答案出奇的快!再次感谢大家。

标签: c makefile compilation


【解决方案1】:

两者都有效;他们只是做不同的任务。

  • make ex1.c 表示“使用makefile 中的规则加上内置知识,确保文件ex1.c 是最新的”。

    make 程序找到 ex1.c 并且没有从其他东西(例如,没有 RCS 或 SCCS 源代码)构建它的规则,因此它报告“无事可做”。

  • make ex1表示“使用makefile中的规则加上内置知识,确保文件ex1是最新的”。

    make 程序发现它知道一种从源文件ex1.c 创建可执行文件ex1 的方法,因此它确保源文件ex1.c 是最新的(它存在,所以它是最新),然后确保ex1 也是最新的(这意味着'文件ex1 的修改时间比ex1.c 更新)。如果您在上次运行 make 后编辑了 ex1.c,它将进行编译以使 ex1ex1.c 更新。如果编译失败,文件ex1 将不存在,所以下次你也会重新编译。一旦它是最新的,那么make 将不会再次重建ex1,直到您再次修改源代码。

这就是make 的工作方式。

【讨论】:

  • 感谢您提供非常详细的回复。这是有道理的,虽然来自python环境,但这似乎真的很死板
  • 我以前从未见过那个网站,但是 Ex 2 的标题“Make Is Your Python Now”非常具有误导性。我明白他们想说什么,但 Make 不是 Python。比较 Make 和 Python 就像把雕刻刀比作厨房。 Make 专门用于更新过期文件。它非常擅长这一点。 Python 被设计为一种通用语言。它非常擅长这一点。我建议你忽略这个比较:对我来说,这似乎比启发性更令人困惑。
【解决方案2】:

make 的目标通常指定您希望它构建或重建的内容,而不是您希望它用来构建其他内容的内容。

如果您输入ex1.c(并且没有自动生成它的规则),make 基本上只是回答“是的,该文件存在。”

【讨论】:

    【解决方案3】:

    make 工具的参数是它的可执行文件的名称 将帮助您创建。它不应该有 .c 扩展名。你应该有 只写make ex1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-18
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 2013-04-06
      • 2011-12-04
      • 2016-06-28
      相关资源
      最近更新 更多