帮我创建一个Makefile

Cha*_*pps 1 c makefile

支持你有一些文件包含的C程序,其中一些由其他文件组成,如下所示:

----------------------------------------
File            | Included files           
----------------------------------------
main.c          | stdio.h, table.h
----------------------------------------
list.c          | list.h
----------------------------------------
symbol.c        | symbol.h
----------------------------------------
table.c         | table.h
----------------------------------------
table.h         | symbol.h, list.h
----------------------------------------
Run Code Online (Sandbox Code Playgroud)

请帮我创建一个makefile,非常感谢!这是我的Makefile,但是有问题吗?谁能调试这些问题,谢谢!

hello:  main.o table.o 
    gcc main.o table.o -o hello

main.o: main.c table.h
    gcc -c main.c

table.o:    table.c table.h
    gcc -c table.c

symbol.o:   symbol.c symbol.h
    gcc -c symbol.c

list.o: list.c list.h
    gcc -c list.c


clean:
    rm hello *.o
Run Code Online (Sandbox Code Playgroud)

pax*_*blo 6

这是一个开始,不是专业人士如何做到这一点,但对初学者水平有利:

hello: main.o list.o symbol.o table.o
    gcc -o hello main.o list.o symbol.o table.o

main.o: main.c table.h symbol.h list.h
    gcc -c -o main.o main.c

list.o: list.c list.h
    gcc -c -o list.o list.c

symbol.o: symbol.c symbol.h
    gcc -c -o symbol.o symbol.c

table.o: table.c table.h symbol.h list.h
    gcc -c -o table.o table.c

clean:
    rm hello *.o
Run Code Online (Sandbox Code Playgroud)

给定makefile的具体问题是您没有链接所有目标文件.因为main.c包含table.htable.h包含symbol.hlist.h,您的程序几乎肯定需要链接symbol.olist.o.

这也是很好的做法,遵循头的依赖(例如,main.o依赖于table.h symbol.h/list.h,因为table.h依赖于这两个) -这是因为没有"纯"的方式来获得头依赖的中间文件.

而且你很少将标准头文件放入make文件中,因为它们不会发生变化 - 如果他们这样做(新编译器),只需清理并重新制作.