本教程通过一个包含七个源文件的示例程序,详细讲解 Makefile 文件的编写,并演示如何使用 make 命令进行编译,以及如何利用依赖关系优化编译过程。

程序源文件:

  • 主函数 main_test.c
  • 加法头函数 add.h
  • int 类型加法函数 add_int.c
  • float 类型加法函数 add_float.c
  • 减法头函数 sub.h
  • int 类型减法函数 sub_int.c
  • float 类型减法函数 sub_float.c

Makefile 文件内容:

CC = gcc
CFLAGS = -Wall

all: main_test

main_test: main_test.o add_int.o add_float.o sub_int.o sub_float.o
	$(CC) $(CFLAGS) -o $@ $^

main_test.o: main_test.c add.h sub.h
	$(CC) $(CFLAGS) -c main_test.c

add_int.o: add_int.c add.h
	$(CC) $(CFLAGS) -c add_int.c

add_float.o: add_float.c add.h
	$(CC) $(CFLAGS) -c add_float.c

sub_int.o: sub_int.c sub.h
	$(CC) $(CFLAGS) -c sub_int.c

sub_float.o: sub_float.c sub.h
	$(CC) $(CFLAGS) -c sub_float.c

clean:
	rm -f *.o main_test

编译过程:

在终端中执行 make 命令后,会先检查所有依赖项是否最新,如果有依赖项不是最新的,则会重新编译这些依赖项,最后重新链接生成可执行文件 main_test。

依赖关系:

  • main_test.o 依赖于 main_test.c, add.h, sub.h
  • add_int.o 依赖于 add_int.c, add.h
  • add_float.o 依赖于 add_float.c, add.h
  • sub_int.o 依赖于 sub_int.c, sub.h
  • sub_float.o 依赖于 sub_float.c, sub.h

修改代码后重新编译:

如果修改了 main_test.c 里的变量值,再次执行 make 命令,会重新编译 main_test.o,因为它依赖于 main_test.c。其他源文件不会重新编译,因为它们的依赖项没有改变。

问题:makefile 文件中的 CFLAGS 变量是用来做什么的?

答: CFLAGS 变量用来指定编译器的参数,例如 -Wall 表示开启所有警告信息。在编译时,make 会将 CFLAGS 的值传递给编译器。

总结:

Makefile 文件通过定义依赖关系和编译规则来管理编译过程,可以有效地提高编译效率。CFLAGS 变量可以用来设置编译器的参数,控制编译行为。

Makefile 编译与依赖关系:示例分析与问题解答

原文地址: https://www.cveoy.top/t/topic/nVCD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录