我正在学习C.我试图制作一个makefile,但由于某种原因,它不起作用。当我输入" make"在控制台中,以下警告将打印到控制台中:
makefile.c:1:1: warning: type specifier missing, defaults to 'int'
[-Wimplicit-int]
CFLAGS=-Wall -g
^~~~~~
makefile.c:1:9: error: use of undeclared identifier 'Wall'
CFLAGS=-Wall -g
^
makefile.c:1:15: error: use of undeclared identifier 'g'
CFLAGS=-Wall -g
^
makefile.c:4:13: error: expected ';' after top level declarator
rm -f ex1
这是makefile的代码:
CFLAGS=-Wall -g
clean:
rm -f ex1
代码应该编译ex1.c文件。为什么我的makefile不起作用?
答案 0 :(得分:6)
Makefiles
是make
的指令,它们不是与c程序相同的程序。从错误消息中看起来您已将Makefile
命名为c源代码文件,因此
将您的make文件重命名为Makefile
mv makefile.c Makefile
您的makefile
未指定要制作的内容 - 它只有clean
标记,但不用担心,如果您的源代码位于单个文件中,则make
可以它,只是;
指定您要制作的内容
$ make ex1
或者在Makefile中有一个条目来做同样的事情,比如
CFLAGS=-Wall -g
ex1: ex1.c # This will tell make that ex1 is compiled from ex1.c
clean:
rm -f ex1
答案 1 :(得分:6)
当你运行make
时,它会试图找出你想要它做什么。
默认情况下,它会查找名为Makefile
或makefile
的文件(对于GNU Make,它首先查找GNUMakefile
)。如果它找到这样一个文件,它会认为它是一个makefile并读取它。
似乎这里make
找到的内容看起来像有点像一个makefile,但后来猜测该如何处理它。在您的情况下,它会找到您认为是包含C代码的源文件的文件makefile.c
,因此它使用其内置规则来处理C源文件并尝试使用C编译器进行编译。那失败了,因为你的makefile不是C程序! (你谎称命名为makefile.c
)
您可以通过运行make
告诉make -f makefile.c
明确地读取该文件(即使它具有非常规名称),或者您可以给它一个合理的名称(Makefile
或makefile
),以便在您运行make
时自动找到它。
当make
处理makefile时,它找到的第一个目标是默认目标。在您的makefile中,第一个目标是clean
,因此当make运行时,它将运行clean
目标的规则。如果您希望它运行不同的目标,则将另一个目标放在makefile中,或者明确指定目标,例如make ex1
(这将导致make
查看文件ex1.c
并使用其内置规则将C源文件编译为可执行文件。
答案 2 :(得分:0)
Makefile不是C文件。
你应该将它从makefile.c重命名为Makefile(mv ./makefile.c ./Makefile)
之后,在你的CFLAGS中,使用-W -ansi -Werror并且不要忘记在完成后删除-g,否则,你的程序执行速度会慢。
然后,因为它不是C文件,所以不要尝试用gcc编译它
输入
make
或者您之前获得的任何其他规则,如
make re; make clean
如果您想编译整个内容,请清理垃圾文件(* .o并根据您的规则自动保存)。
答案 3 :(得分:-1)
Makefile没有扩展名。将makefile.c更改为makefile然后尝试。 假设您想要为file1.c创建makefile。 file2.c,这里file1.c依赖于file2.c create makefile,如下所示
makefile: file1.c file2.c
gcc -o makefile file1.c file2.c
您可以使用命令
进行编译make makefile
答案 4 :(得分:-1)
我通过执行以下操作解决了问题:
查看文件中的所有字符,特别是“干净”,即使您保存也不会改变颜色。
我认为你没有正确保存。
打开gedit
并粘贴您的代码,然后按 ctrl + S 进行保存,然后将其命名为Makefile
,而不是{{ 1}}。 Makefile是makefile类型。
保存时,单击文件属性检查文件Makefile.c
。如果您看到Type:maketype为Ok或查看文件中的所有字符,则“clean”会将颜色从灰色更改为另一种颜色。
最后,在Makefile
中,写下terminal
,而不是make clean
。它将像“learnCthehardcode”课程一样运行。