嵌套makefile(下)

目录

1、前言

2、编写C语言程序

           2.1 main.c

        2.2 fun.c

        2.3 list.h

        2.4:移动文件

            2.5 :编写总控makefile

                   2.5.1

          2.6:src子makefile

        2.7:obj子makefile

      2.8:运行

3.总结


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看完,再看我接下来讲得数据结构,我们从顺序表开始出发


版权声明:本文为m0_59700590原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。