Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.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 如何创建一个简单的makefile?_C_Makefile - Fatal编程技术网

C 如何创建一个简单的makefile?

C 如何创建一个简单的makefile?,c,makefile,C,Makefile,我有三个文件:main.c、foo.c和foo.h。我想知道如何使最简单的makefile成为可能?我以前从未制作过makefile,我所做的一切都只是给了我错误。另外,文件应该是什么类型的扩展名?目前我已将其保存为makefile.c 谢谢 我试过这个: all: main.c foo.c gcc main.c foo.c -o main 当我使用make命令时,会出现大量错误。满足您需要的简单Makefile如下 obj-m:=main.o foo.o 并将其保存为没有扩展名的M

我有三个文件:main.c、foo.c和foo.h。我想知道如何使最简单的makefile成为可能?我以前从未制作过makefile,我所做的一切都只是给了我错误。另外,文件应该是什么类型的扩展名?目前我已将其保存为makefile.c

谢谢

我试过这个:

all: main.c foo.c
    gcc main.c foo.c -o main

当我使用make命令时,会出现大量错误。

满足您需要的简单Makefile如下


obj-m:=main.o foo.o


并将其保存为没有扩展名的
Makefile
,因为make文件不能有任何扩展名

我可能会写这样的东西(我不是100%掌握所有隐式规则,所以我只是保持简单):

确保命令部分缩进了制表符,而不是空格。在某些编辑器中(在某些配置中),必须键入ctrl+V,然后键入TAB


另存为不带扩展名的
makefile

在这样一个干净的设置中,您根本不需要makefile–如果您使用。只需调用
makepp-main
(不覆盖任何内置规则)将发送它寻找用于构建它的源代码,如
main.cpp
或在您的情况下
main.c
。它将扫描它的
#include
语句,并在每次include发生显著变化时(即,不仅仅是轻微的重新格式化或注释变化)重新生成

整洁的东西是,在链接时,它将把标题视为链接在任何匹配模块中的提示,在你的例子中<>代码> fo.o < />代码>它将从<代码> fo.c<代码>中建立。这是递归的,如果说“代码> fo.c<代码>包含<代码> bar .h < /代码>,它也会考虑<代码> bar .o>代码>链接。


还有很多事情要做。除了做GNU make所能做的几乎所有事情外,还有很多有用的事情,您甚至可以通过一些Perl编程来扩展您的make文件。

显然不是这样……请查阅GNU make howto。它有很多例子。@Robert:“一大堆错误”不是对问题的有用描述。什么错误?谢谢,问题出在扩展名上make file没有扩展名..我用过so manu Makefile但没有扩展名..Makefile示例不正确。如果您试图使用内核构建系统构建一个内核模块,这将很好,但是作为一个独立的makefile.BTW,它不会做任何事情,当然makefile可以有扩展名。Makefiles可以根据需要命名。但是,默认情况下,
make
程序只会查找某些名称:通常是
Makefile
Makefile
(某些版本也会查找其他版本)。如果你想使用非标准名称,你必须告诉
make
它是什么,使用
-f
选项:
make-f MyMakefile.mk
这是不对的。如果您的
main
程序不存在,您将得到一个错误,即没有生成
main
.Oops的规则。谢谢我会修好的。。。完成。
all: main            # all depends on the program (put it first so `make` == `make all`)
main: main.o foo.o   # main depends on its objects
    gcc main.o foo.o -o main    # create the program by linking the object files
foo.o: foo.c foo.h   # the foo object depends on its .c and .h files
                     # the main object implicitly depends on its .c file