c make files,如何制作一个可以编译四个源文件的文件?

时间:2012-02-01 03:39:07

标签: c windows makefile

这是我的作业。我正在寻找有关如何制作将要编译三个源文件的“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 功能。当老师提到“ clean ”功能时,我不明白我被告知了什么。我不确定这个makefile是否真的能够创建这个文件,因为我不知道如何运行它。

另外,如果你们不介意给我一个链接或告诉我一些关于基于Windows系统的makefile命令的更多信息。我希望在我的makefile中创建和“额外功能”,因为这样做会给我更好的标记,我不知道我还能做什么。

提前致谢。

大编辑: 所以,在玩了一下后,我想通了如果我将makefile.txt文件更改为makefile.bat并打开我的visual studio cmd提示符,进入正确的目录并输入(我知道我没有运行cmd promt以运行.bat文件):

 makefile.bat 

它将尝试编译所有文件。问题是,它不适用于“.h”文件,特别是timestable.h文件。此外,“timestable.exe”命令不起作用。关于在这做什么的任何想法?

2 个答案:

答案 0 :(得分:2)

(顺便说一句,如果你手动运行cl timestable.c tablein.c tableout.c timestable.h会发生什么?)

您通常希望使用知道如何编译单Makefile的{​​{3}}来编写.c以将.obj个文件编译为.c个文件将文件放入.obj文件,然后放入另一个知道如何将所有.obj文件链接到单个可执行对象的规则。 (一个重要的好处是,这允许仅重建已更改的部分。到目前为止,您的Makefile将需要在任何更改时重新编译所有输入文件。)

如果你有很多.obj个文件,你可能需要make clean删除所有可以从源重建的目标文件和可执行文件。这可能就像将clean声明为虚假目标然后删除所有可以重建的文件一样简单。

请注意,Makefile按惯例命名为MakefilemakefileGNUmakefile。 (GNU make实际上会将逆序中的文件搜索到此列表,但Makefile是我唯一喜欢的名称。)如果您使用其中一个名称,那么您只需运行make foo即可运行foo目标。如果为Makefile选择其他名称,则还需要使用-f filename命令行选项来选择其他文件, 是令人讨厌的。有时是必要的。)

答案 1 :(得分:0)

当然,您的老师/学校提供了一些课程笔记,其中解释了make / nmake的基础知识,如果他们希望您将其用于作业;或者至少是对在线资料的一些指示?
您似乎对makefile的确切含义以及如何使用它感到困惑。您不像批处理脚本那样直接从命令行运行它,但是如果您使用的是Visual Studio,则需要一个程序(称为makenmake); makefile是一种由该程序读取的输入脚本。然后,程序使用makefile中的信息来确定运行以更新主目标所需的命令。

你应该能够找到一些教程来描述make的基础知识,比我在这里做得更好。通过Google make tutorial快速搜索此链接:http://www.eng.hawaii.edu/Tutor/Make/。 我浏览了一下它看起来像一个很好的介绍(它使用图片和短片,所以它一定很好,对吧?;))。