makefile

22 篇文章 0 订阅

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文件:

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文件的内容,比较目标文件和依赖文
件的日期和时间,当依赖文件的日期比目标文件得时间新的时候,
则根据命令重新生成目标文件

简化写法

变量

隐式规则
  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 $@
hello: hello.o
    gcc $^ -o $@
%.o: %.c
    gcc -c $^ -o $@
clean:
    rm -rf *.o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值