【Linux C】Makefile入门

    技术2024-08-17  59

    Makefile是Linux下编译C/C++的利器,它定义了整个项目的编译规则

     

    Makefile基本构成:

     

    最基本的Makefile格式是:

     

    目标:依赖文件

    [Tab]  命令

     

     

    目标是想要生成的文件

    依赖文件是为了生成该文件需要的前提条件

    命令则是生成文件的命令

     

    Makefile中最常用的变量是 $@ $^ 和 $< ,这些变量能简化Makefile的书写,也使Makefile更强壮。

     

    $@  ---  指代目标文件

    $^    ---  指代所有依赖文件

    $<    ---  指代第一个依赖文件

     

    比如如下代码

     

    main: main.o test1.o test2.o

            gcc -o main main.o test1.o test2.o

     

    main.o: main.c test1.h test2.h

            gcc -c main.c

     

    test2.o: test2.c test2.h

            gcc -c test2.c

     

    test1.o: test1.c test1.h

            gcc -c test1.c

     

    就能简写成

     

    main:main.o test1.o test2.o

            gcc -o $@ $^

     

    main.o: main.c test1.h test2.h

            gcc -c $<

     

    test2.o: test2.c test2.h

            gcc -c $<

     

    test1.o: test1.c test1.h

            gcc -c $<

     

    Makefile还能继续通过隐藏规则进一步简化,比如:

     

    ..c.o:

            gcc -c $<

     

    这个规则表示所有的.o文件都依赖与名字相同的.c文件

     

    这样一来,上面的代码就可以简化成

     

    main: main.o test1.o test2.o

            gcc -o $@ $^

    ..c.o:

            gcc -c $<

     

     

    当然,我们也可以自己定义变量,这样有利于代码的移植,也可以非常方便的使用不同的命令参数来控制编译

    比如我们可以将编译器作为变量,这样只要改变变量的值,那整个Makefile就可以在不同的环境下进行编译

     

    这样,上面的代码可以写成

     

    CXX = gcc

     

    main:main.o test1.o test2.o

            $(CXX) -o $@ $^

    ..c.o:

            $(CXX) -c $<

     

    最新回复(0)