题
支持某些文件包含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
----------------------------------------
请帮我创建一个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
解决方案
这是一个开始,不是专业人士如何做到这一点,但对初学者水平有好处:
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
您给定的makefile的具体问题是您没有链接所有目标文件。因为 main.c
包含 table.h
和 table.h
包含 symbol.h
和列表。 h
,您的程序几乎肯定需要链接 symbol.o
和 list.o
。
遵循标头依赖关系也是一种好习惯(例如, main.o
依赖于 table.h
和 symbol.h /list.h
因为 table.h
取决于那两个) - 这是因为没有“整洁”的获取标头依赖关系的中间文件的方法。
你很少将标准标题放入make文件中,因为它们不会发生变化 - 如果他们这样做(新编译器),只需清理并重新制作。
不隶属于 StackOverflow