如何在linux中为c程序编写makefile

如何在linux中为c程序编写makefile,c,linux,makefile,C,Linux,Makefile,我已经为linux中的双链表编写了一个c程序。该程序名为program2.c。 我使用“cc program2.c-oout2”编译了它。 它编译并执行得很好 甚至还尝试编写一个makefile all:doublelinkedlist doublelinkedlist:program2.c gcc -Wall -Werror -O2 -o $@ $< clean : \rm -fr doublelinkedlist all:doublelinkedl

我已经为linux中的双链表编写了一个c程序。该程序名为program2.c。 我使用“cc program2.c-oout2”编译了它。 它编译并执行得很好

甚至还尝试编写一个makefile

all:doublelinkedlist
doublelinkedlist:program2.c
        gcc -Wall -Werror -O2 -o $@  $<
clean :
        \rm -fr doublelinkedlist 
all:doublelinkedlist
doublelinkedlist:program2.c
gcc-Wall-Werror-O2-o$@$<
清洁:
\rm-fr双链接列表
当我做的时候,它给了我错误。
有人能帮我写一个makefile吗

使用makefile时,您还开始使用
-Wall-Werror
标志。这是一件非常好的事情。 现在,编译器会在程序中查找更多可疑的内容,如果发现任何内容,就会拒绝编译。这对捕捉bug有很大帮助

但是,这些警告意味着您的程序无法编译,您需要通过更改代码来修复这些警告,以便编译器确保一切正常(只要编译器能够检查,当然代码仍然可能包含bug)


常见的问题是混合不同的类型,不注意
const
关键字。但是要获得有关特定警告的帮助,您需要显示警告和代码。或者更好-在StackOverflow中搜索它们中的每一个,我相信您会找到很好的答案。

显示您得到的错误。我使用编写的makefile,用一个选项卡替换gcc和\rm行之前的空格。它对我很有效。哦,当
-f
足够时,不要使用
-fr
。为什么不按照惯例,让从单个源文件构建的程序与源文件的基本名称相同?因此,要么程序是从
program2.c
构建的
program2
,要么程序是从
doublelinkedlist.c
构建的
doublelinkedlist
。如果这样做,就不需要
makefile
make
知道如何在没有任何额外信息的情况下构建程序。