我目前正在学习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不起作用?
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
当你运行make它时试图弄清楚你想要它做什么.
默认情况下,它会查找名为Makefile或的文件makefile(对于GNU Make,它首先查找GNUMakefile).如果找到这样的文件,则假定它是一个makefile并读取它.
看来这里make找到的东西看起来有点像 makefile,但后来猜测该如何处理它.在您的情况下,它会发现您makefile.c假定的文件是包含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源文件编译成可执行文件) ).