[Makefile]多目录Makefile写法 您所在的位置:网站首页 makefile不同目录下的文件 [Makefile]多目录Makefile写法

[Makefile]多目录Makefile写法

2023-05-06 04:09| 来源: 网络整理| 查看: 265

最近需要写一个测试程序,这个测试程序需要集成一些功能,写在同一个文件看上去很不好,多个文件的Makefile又不是很熟,于是分享下面这篇文章

先介绍下,调试Makefile时,想知道某个变量的值,怎么办,在该变量下方加入:

$(shell echo $(VAR) > a.txt)

转自:http://blog.csdn.net/yuzhihui_no1/article/details/44810357

  前面已经分享了单目录项下多文件的makefile的编写,现在来看看多目录下多文件makefile的编写;

        在做项目时,一般文件都会分几个目录来存放;基本的是  include/  bin/ src/ obj/ lib/ tools/,这几个文件;我先说下我的文件存放目录,用ls -R可以查看到所有文件:./include/common.h    ./src/main.c    ./src/printStatus.c  就三个文件,其中*.c 文件都依赖于 *.h文件;

        同样的先上第一版makefile:

[cpp] view plain copy   CC=gcc   objects=obj/main.o obj/printStatus.o      bin/main:$(objects)      $(CC) -o bin/main $(objects)      obj/main.o:src/main.c include/common.h      $(CC) -o obj/main.o -c src/main.c -Iinclude      obj/printStatus.o:src/printStatus.c include/common.h      $(CC) -o obj/printStatus.o -c src/printStatus.c -Iinclude      clean:      rm -rf $(objects) bin/main  

        上面的makefile就是gcc命令的拼凑起来的,下面来分享下比较通用的多目录下的makefile;

 

        在看多目录的makefile时,先来理解下几个函数和变量;

函数:

        wildcard 这是扩展通配符函数,功能是展开成一列所有符合由其参数描述的文 件名,文件间以空格间隔;比如:罗列出src下的所有.c文件:$(wildcard ${SRC}/*.c)

        patsubst 这是匹配替换函数, patsubst ( 需要匹配的文件样式,匹配替换成什么文件,需要匹配的源文件)函数。比如:用src下的*.c替换成对应的 *.o文件存放到obj中:$(patsubst  %.c, ${OBJ}/%.o, $(notdir $(SOURCE)))

        notdir 这是去除路径函数,在上面patsubst函数中已经使用过,去除SOURCE中文件的所有目录,只留下文件名;

 

变量:

        $@:表示目标文件;一般是在规则中这么用:gcc  -o $@  $(object);

        $^:表示所有依赖文件;一般是在规则中这么用:gcc -o $@  $^  ;用所有依赖文件链接成目的文件;

        $



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有