c制作文件,如何制作一个可以编译四个源文件的文件?
这是我的家庭作业。我正在寻找有关如何生成一个“makefile”的帮助,该“makefile”将编译三个源文件。其中将命名为“timestable.c tablein.c tableout.c timestable.h”。这是四个源文件。我已经创建了一个makefile来实现这一点,我相信这是正确的,但我不确定如何测试它以查看它是否能够编译?以下是我的makefile的内容:c制作文件,如何制作一个可以编译四个源文件的文件?,c,windows,makefile,C,Windows,Makefile,这是我的家庭作业。我正在寻找有关如何生成一个“makefile”的帮助,该“makefile”将编译三个源文件。其中将命名为“timestable.c tablein.c tableout.c timestable.h”。这是四个源文件。我已经创建了一个makefile来实现这一点,我相信这是正确的,但我不确定如何测试它以查看它是否能够编译?以下是我的makefile的内容: timestable.exe: timestable.c tablein.c tableout.c timestable
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的程序,并提供干净的功能。当老师提到“干净”功能时,我不明白他们告诉我什么。我不确定这个makefile是否真的可以创建这个文件,因为我不确定如何运行它
另外,如果你们不介意给我一个链接或者告诉我一些关于基于windows系统的makefile命令的更多信息。我希望在我的makefile中创建和“额外特性”,因为这样做会给我更好的分数,我不知道我还能做什么
提前谢谢
大编辑:
因此,在玩了一会儿之后,我发现如果我将makefile.txt文件更改为makefile.bat,并打开visual studio cmd提示符,进入正确的目录并键入(我知道运行.bat文件不必运行cmd promt):
它将尝试编译所有文件。问题是它不能与“.h”文件一起使用,具体是timestable.h文件。此外,“timestable.exe”命令也不起作用。你知道怎么做吗 (顺便提一下,如果手动运行cl timestable.c tablein.c tableout.c timestable.h
,会发生什么情况?)
您通常希望编写Makefile
以将.c
文件编译为.obj
文件,使用该规则知道如何将单个.c
文件编译为.obj
文件,然后使用另一条规则知道如何将所有.obj
文件链接到单个可执行对象。(一个重要的好处是,这只允许重建已更改的部分。到目前为止,您的Makefile
将需要在任何一个更改时重新编译所有输入文件。)
当您有这么多的.obj
文件时,您可能需要一个清除,删除所有可以从源代码重建的对象文件和可执行文件。这可能很简单,比如声明clean
为虚假目标,然后删除所有可以重建的文件
请注意,按照约定,Makefile的名称为Makefile
或Makefile
或GNUmakefile
。(GNUmake
实际上是按与此列表相反的顺序搜索文件,但Makefile
是我唯一喜欢的名称。)如果使用其中一个名称,则只需运行makefoo
即可运行foo
目标。如果您为Makefile选择了一个不同的名称,那么您还需要使用-f filename
命令行选项来选择另一个文件,这很烦人。有时是必要的。)当然,你的老师/学校提供了一些课程笔记,如果他们希望你在作业中使用make
/nmake
的基础知识,会在笔记中进行解释;或者至少是一些指向在线材料的指针?
您似乎对makefile到底是什么以及如何使用它感到困惑。不像批处理脚本那样直接从命令行运行它,但需要一个程序(如果使用Visual Studio,则称为make
,或nmake
);makefile是一种由该程序读取的输入脚本。然后,程序使用makefile中的信息来确定需要运行哪些命令来更新主目标
您应该能够找到一些教程,这些教程描述了make
的基础知识,比我在这里做的要好得多。在谷歌上快速搜索make tutorial
,找到以下链接:。
我浏览了一下,它似乎是一个很好的介绍(它使用了图片和简短的部分,所以一定很好,对吗?;)。谢谢你提供的所有信息,但我有点困惑。如何运行此make文件以查看其是否有效?通过命令提示符?还有,你刚才说的干净让我迷路了。现在,我的makefile是一个“makefile.txt”文件,与其他四个源文件位于同一位置。我是否将makefile.txt更改为其他内容?抱歉。与您的答案描述的基本原理唯一的真正区别是,对象文件通常具有obj
扩展名,而不是o
。考虑到这一点,我的makefile应该是“makefile”而不是“makefile.txt”?要运行它,我只需打开visual studio cmd提示符并进入与此makefile相同的目录,然后运行makefile来创建timestable.exe?是的,makefile
是一个可接受的名称。您可以使用cmd.exe
,或者Cygwin的bash
,或者可能是visual studio命令提示符——尽管我不知道这是如何实现的。那么如何在命令提示符下运行makefile呢?只是“makefile timestable.exe”?
makefile.bat