这是我的作业。我正在寻找有关如何制作将要编译三个源文件的“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”命令不起作用。关于在这做什么的任何想法?
答案 0 :(得分:2)
(顺便说一句,如果你手动运行cl timestable.c tablein.c tableout.c timestable.h
会发生什么?)
您通常希望使用知道如何编译单Makefile
的{{3}}来编写.c
以将.obj
个文件编译为.c
个文件将文件放入.obj
文件,然后放入另一个知道如何将所有.obj
文件链接到单个可执行对象的规则。 (一个重要的好处是,这允许仅重建已更改的部分。到目前为止,您的Makefile
将需要在任何更改时重新编译所有输入文件。)
如果你有很多.obj
个文件,你可能需要make clean
删除所有可以从源重建的目标文件和可执行文件。这可能就像将clean
声明为虚假目标然后删除所有可以重建的文件一样简单。
请注意,Makefile按惯例命名为Makefile
或makefile
或GNUmakefile
。 (GNU make
实际上会将逆序中的文件搜索到此列表,但Makefile
是我唯一喜欢的名称。)如果您使用其中一个名称,那么您只需运行make foo
即可运行foo
目标。如果为Makefile选择其他名称,则还需要使用-f filename
命令行选项来选择其他文件, 是令人讨厌的。有时是必要的。)
答案 1 :(得分:0)
当然,您的老师/学校提供了一些课程笔记,其中解释了make
/ nmake
的基础知识,如果他们希望您将其用于作业;或者至少是对在线资料的一些指示?
您似乎对makefile的确切含义以及如何使用它感到困惑。您不像批处理脚本那样直接从命令行运行它,但是如果您使用的是Visual Studio,则需要一个程序(称为make
或nmake
); makefile是一种由该程序读取的输入脚本。然后,程序使用makefile中的信息来确定运行以更新主目标所需的命令。
你应该能够找到一些教程来描述make
的基础知识,比我在这里做得更好。通过Google make tutorial
快速搜索此链接:http://www.eng.hawaii.edu/Tutor/Make/。
我浏览了一下它看起来像一个很好的介绍(它使用图片和短片,所以它一定很好,对吧?;))。