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

ant*_*guy 7 c makefile compilation



我正在通过"以艰难的方式学习C"来学习C编程.我目前正在练习1,可以在这里找到:http://c.learncodethehardway.org/book/ex1.html

我理解所涵盖的概念,但不了解编译过程.在命令行中使用"make"命令时,为什么这样做:

$ make ex1
Run Code Online (Sandbox Code Playgroud)

这不起作用:

$ make ex1.c
Run Code Online (Sandbox Code Playgroud)

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

make: nothing to be done for 'ex1.c'
Run Code Online (Sandbox Code Playgroud)

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

Jon*_*ler 12

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

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

    make程序发现ex1.c并且没有规则可以从其他东西构建它(例如,没有RCS或SCCS源代码),因此它报告"什么都不做".

  • make ex1说"使用makefile中的规则加上内置知识,确保文件ex1是最新的".

    make程序发现它知道一种方式来创建一个可执行的ex1源文件ex1.c,所以它保证了源文件ex1.c是最新的(它的存在,所以它是最新的),然后可以确保ex1是最新的太(这意味着'文件ex1最近被修改过ex1.c).如果您在ex1.c上次运行后make进行了编辑,那么它将进行编译以使其ex1更新ex1.c.如果编译失败,该文件ex1将不存在,因此下次您将再次进行重新编译.一旦它是最新的,那么在您再次修改源之前make不会ex1再次重建.

这是make设计工作的方式.

  • 我以前从未见过那个网站,但是Ex 2的标题"Make Is Your Python Now"非常具有误导性.我得到他们想说的话,但Make不是Python.比较Make和Python就像比较雕刻刀和厨房.Make专门用于更新过时的文件.它非常擅长.Python旨在成为一种通用语言.它非常擅长.我建议你忽略这种比较:它似乎比照亮我更令人困惑. (4认同)