makefile

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
阅读更多
版权声明: https://blog.csdn.net/NeverWA/article/details/79948038
文章标签: Linux make
个人分类: C/C++ Linux
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭