目录
1、前言
我们在上一篇文章中,理解到嵌套makefile的含义以及简单的语法,我们今天拿一个实例来演示一下makefile在工程中的应用。
2、编写C语言程序
在上一篇中,我们建立了list.h main.c fun.c三个文件,接下来我们简单编写一下,
2.1 main.c
#include "../include/list.h"
int main()
{
fun();
return 0;
}
2.2 fun.c
#include "../include/list.h"
void fun(void)
{
printf("hello");
printf("hello");
printf("hello");
printf("hello");
printf("hello");
}
2.3 list.h
#ifndef _LIST_H
#define _LIST_H
//头文件、宏定义、结构体、枚举、函数声明一般都放在库文件中
#include <stdio.h>
void fun(void);
#endif
2.4:移动文件
我们的文件都是在src文件夹下编写的,我们需要把库文件放置在include文件夹中。
mv list.h ../include/
2.5 :编写总控makefile
在编写总控makefile的时候,我们有一些点要注意
2.5.1
我们要在总makefile中把我们的变量定义好,那么定义好的变量要传给子makefile中,怎么传呢?我们用export语句将我们所有的变量传给子makefile,这样我们就不用在子makefile中再次定义了,那么总makefile怎么控制子makefile的呢?我们用举一个例子
例如,我们有一个子目录叫 subdir,这个目录下有个 Makefile 文件,来指明了这个目录下 文件的编译规则。那么我们总控的 Makefile 可以这样书写:
cd subdir && $(MAKE)
其等价于:
$(MAKE) -C subdir
定义$(MAKE)宏变量的意思是,也许我们的 make 需要一些参数,所以定义成一个变量比 较利于维护。这两个例子的意思都是先进入“subdir”目录,然后执行 make 命令,同学可以任选其一。
//回到上一级中
//定义变量
OBJS:=main.o fun.o
CC:=gcc
CFLGAS:=-c -Wall
Myapp:=main //要生成的目标文件
//传文件
export OBJS CC CFLGAS
ALL:
make -C src//进入src中执行
make -C obj//进入obj中执行
2.6:src子makefile
ALL:$(OBJS)
mv *.o ../obj/
main.o:main.c
$(CC) $(CFLGAS) $< -o $@
fun.o:fun.c
$(CC) $(CFLGAS) $< -o $@
2.7:obj子makefile
ALL:$(Myapp)
mv $< ../bin/
$(Myapp):$(OBJS)
$(CC) $^ -o $@
2.8:运行
我们在有总makefile的目录下,make一下,就可以生成可执行文件了,然后,我们运行一下可执行文件就可以了。
3.总结
我在这篇用的C语言程序比较简单,只是为了大家理解而写的一些简单程序,大家可以熟悉一下流程,好了今天的分享到这里就结束了,接下来我将会写IO的一些知识点,如果大家要想学好接下来的数据结构,还是把我的IO看完,再看我接下来讲得数据结构,我们从顺序表开始出发