C语言make文件,如何制作一个可以编译四个源文件的make文件?

3
这是我的作业。我正在寻求帮助,了解如何制作一个“makefile”,以编译三个源文件。这些文件的名称为“timestable.c tablein.c tableout.c timestable.h”。这四个文件都是源文件。我已经创建了一个可以完成这个任务的makefile,我相信它是正确的,但我不确定如何测试它是否能够编译?这是我的makefile内容:
timestable.exe: timestable.c tablein.c tableout.c timestable.h
    cl timestable.c tablein.c tableout.c timestable.h 

这个makefile必须使用Visual Studio的cl命令来构建名为timestable.exe的程序,并提供清除功能。当老师提到“clean”功能时,我不明白他在说什么。我不确定这个makefile是否能够创建这个文件,因为我不知道如何运行它。
此外,如果您们不介意提供一个链接或告诉我有关基于Windows系统的makefile命令的更多信息。我希望在我的makefile中创建一个“额外功能”,因为这样做将使我获得更好的分数,但我不知道还能做些什么。
提前致谢。
重要编辑:经过一番摸索,我发现如果将makefile.txt文件更改为makefile.bat并打开我的Visual Studio cmd提示符,进入正确的目录并键入以下内容(我知道我不必运行cmd promt以运行.bat文件):
 makefile.bat 

它将尝试编译所有文件。问题是,它不适用于“.h”文件,特别是timestable.h文件。此外,“timestable.exe”命令也无法运行。有什么建议吗?

2个回答

2
(顺便问一下,如果手动运行cl timestable.c tablein.c tableout.c timestable.h会发生什么?)
通常您希望编写Makefile,使用模式规则.c文件编译为.obj文件,并且知道如何将单个.c文件编译成.obj文件的规则,然后再使用另一条规则将所有.obj文件链接到单个可执行对象中。(一个重要的好处是只有更改的部分需要重新构建。迄今为止,您的Makefile将要求重新编译所有输入文件,任何时候都会更改其中任何一个文件。)
当您拥有如此多的.obj文件时,您可能需要一个make clean,它会删除可以从源代码重新构建的所有对象文件和可执行文件。这可能只需声明clean为虚假目标,然后删除所有可以重新构建的文件即可。
请注意,按照惯例,Makefile 的名称为 MakefilemakefileGNUmakefile。(GNU make实际上以与此列表相反的顺序搜索文件,但我只喜欢Makefile这个名称。)如果您使用其中一个名称,则可以运行make foo来运行foo目标。如果为Makefile选择不同的名称,则还需要使用-f 文件名命令行选项来选择其他文件,而那个很烦人。有时是必要的。)

谢谢提供所有的信息,但我有点困惑。我该如何运行这个make文件以查看它是否有效?通过命令提示符?另外,你说的那个“clean”让我感到困惑。现在我的makefile是一个名为“makefile.txt”的文件,与其他四个源文件处于同一位置。我需要将makefile.txt更改为其他名称吗?抱歉。 - Robolisk
是的,“makefile”是一个可以接受的名称。你可以使用cmd.exe,或者Cygwin的bash,或者可能是Visual Studio命令提示符--虽然我不知道它是如何实现的。 - sarnold
那么我该如何在命令提示符中运行makefile呢?只需要输入“makefile timestable.exe”吗? - Robolisk
是的。您也可以运行裸的 make 命令来运行 makefile 中的第一个目标,这非常方便。 :) - sarnold
当我运行它时,命令提示符中出现“makefile未被识别”错误。 - Robolisk
显示剩余6条评论

0
你的老师/学校肯定提供了一些课程笔记,其中解释了make/nmake的基础知识,如果他们期望你在作业中使用它;或者至少提供一些在线材料的指引?
你似乎对什么是makefile以及如何使用它感到困惑。你不能像批处理脚本一样直接从命令行运行它,但你需要一个程序(称为make,或者如果你使用Visual Studio,则为nmake);makefile是一种输入脚本,由该程序读取。然后,该程序使用makefile中的信息确定需要运行哪些命令来更新主目标。
你应该能够找到一些比我更好地描述make基础知识的教程。在Google上快速搜索make tutorial,会出现这个链接:http://www.eng.hawaii.edu/Tutor/Make/。我浏览了一下,它似乎是一个不错的入门介绍(它使用图片和短小的章节,所以肯定很好,对吧?;))。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接