Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c制作文件,如何制作一个可以编译四个源文件的文件?_C_Windows_Makefile - Fatal编程技术网

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

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

这是我的家庭作业。我正在寻找有关如何生成一个“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的程序,并提供干净的功能。当老师提到“干净”功能时,我不明白他们告诉我什么。我不确定这个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
。(GNU
make
实际上是按与此列表相反的顺序搜索文件,但
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