欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

makefile

程序员文章站 2022-05-13 15:08:27
...

makefile

对多文件构成的大中型软件项目进行编译、调试的工具

工作机制

有5个源文件
main.c
function1.h
function1.c
function2.h
function2.c

main.c

#include "function1.h"
#include "function2.h" 
int main(int argc, char **argv)
{
function1_print("hello");
function2_print("world");
    return 0;
}

function1.h

//function1.h 
#include<stdio.h>
void function1_print(char *str); 

function1.c

//function1.c 
#include "function1.h"
void function1_print(char *str)
{
printf("This is function1 print %s\n", str);
}

function2.h

//function2.h
#include<stdio.h>
void function2_print(char *str); 

function2.c

//function2.c 
#include "function2.h"
void function2_print(char *str)
{
printf("This is function2 print %s\n", str);
}

依赖关系图:
makefile

makefile文件:

main: main.o function1.o function2.o
    gcc -o main main.o function1.o function2.o
main.o: main.c function1.h function2.h
    gcc -c main.c
function1.o: function1.c function1.h
    gcc -c function1.c
function2.o: function2.c function2.h
    gcc -c function2.c
clean:
    rm *.o

make命令会读取makefile文件的内容,比较目标文件和依赖文
件的日期和时间,当依赖文件的日期比目标文件得时间新的时候,
则根据命令重新生成目标文件

简化写法

变量

makefile

makefile

隐式规则

  1. C语言程序
    .o文件会自动找到对应的.c文件,用cc命令进行编译
  2. C++程序
    .o文件会自动找到对应的.cc文件,用g++进行编译
  3. 汇编程序
    .o文件会自动找到对应的.s文件,并且用as命令进行汇编

简化后:

main: main.o function1.o function2.o   
clean:
    rm *.o

伪目标

.PHONY:clean
伪目标的语句一定会执行,而不管目标文件是否是最新的。例如:在源代码所在目录下有一个名为clean的文件,那么在make后,它的修改时间一直不会不变化,导致make clean 失效。此时就可以用 .PHONY:clean 来强制cLean。

同时生成多个可执行文件

.PHONY: clean all
all: main hello
main: main.o
    gcc $^ -o aaa@qq.com
hello: hello.o
    gcc $^ -o aaa@qq.com
%.o: %.c
    gcc -c $^ -o aaa@qq.com
clean:
    rm -rf *.o
相关标签: Linux make