c - 使用 "make"C 编程(艰难地学习 C)

标签 c makefile compilation



我正在通过“艰难地学习 C”来学习 C 编程。我目前正在做练习 1,可以在这里找到:http://c.learncodethehardway.org/book/ex1.html

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

$ make ex1

这行不通:

$ make ex1.c

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

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

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

最佳答案

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

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

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

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

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

这就是 make 设计的工作方式。

关于c - 使用 "make"C 编程(艰难地学习 C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602496/

相关文章:

C# - 是否有可以在 Asp.NET Core 3.1 中访问的唯一 "Build ID"?

从 <sys/stat.h> 调用 stat 失败并出现 "Value too large for defined data type"错误

c - C 中的任何系统调用以更改 HP-UX 中文件的权限

c - 我必须从 C 文本文件中读取键的值

linux - OpenSSL 以静态方式链接 libcrypto.a

c# - 自动编译两个版本的C#程序

c - 我的链接列表有问题。这是一个双重列表的贪吃蛇游戏,它不吃东西,它只是每 5 步增长 1 block

c - 链接错误 : Undefined reference to functions that're defined in a separate file?

Makefile 规则取决于文件数量/标题的变化,而不是文件内容的变化

c - Makefile, "nothing to be done for all"错误