美文网首页
Makefile 的一些使用

Makefile 的一些使用

作者: printf_K | 来源:发表于2017-05-20 09:50 被阅读0次

今天为了写编译原理的词法分析器,特地写了一下Makefile来简化编译过程,本来打算在子目录放置 Makefile 完成单独的编译,但是根目录里的Makefile不管怎么写都陷入死循环,所以现在我参照网上博客和一些大项目的Makefile 来编写这篇文章。可能不会一次写完,一点一点更新吧。

错误的写法

cd ./type
make
cd ..

一些多目录Makefile的写法

1.make -C

make -C 可以切换到指定目录执行make操作
比如:

make -C ./src

执行结果如下:

make -C ./src
make[1]: Entering directory '/home/k/temp/compiler_d/src'
......
....
....
make[1]: Leaving directory '/home/k/temp/compiler_d/src'

2.cd ${SUBDIR} && make

原文链接:[CSDN makefile进入子文件夹执行make][http://blog.csdn.net/taolinke/article/details/6626298]

SUBDIRS=directory1 directory2 directory3  
RECURSIVE_MAKE= @for subdir in $(SUBDIRS); \  
      do \  
      echo "making in $subdir"; \  
      ( cd $subdir && $(MAKE) all -f Makefile -e CC='${CC}' CFLAG='${CFLAG}') || exit 1; \  
       done  
RECURSIVE_CLEAN= @for subdir in $(SUBDIRS); \  
       do \  
       echo "cleaning in $subdir"; \  
       ( cd $subdir && $(MAKE) clean -f Makefile) || exit 1; \  
       done       
subdirs:  
        $(RECURSIVE_MAKE)       
all: subdirs    
dclean:  
            $(RECURSIVE_CLEAN)  

该思路是将cd 操作 与 make 操作 用&& 连接,在子shell中进行操作
通过几次实验后我才明白,在Makefile里的cd 命令 只是暂时更改了目录,用子shell的概念比较好理解这点
还有,Makefile里面${..}会在执行前提前替换,比如:

all:
        cd ./src && make && echo ${SUBSHELL}
        echo ${PWD}

输出为(home/k/temp/temp 为当前目录):

(cd ./src && make && echo "pwd" > temp && echo )
make[1]: Entering directory '/home/k/temp/temp/src'
gcc -o test main.c
make[1]: Leaving directory '/home/k/temp/temp/src'

echo /home/k/temp/temp
/home/k/temp/temp

其中 ${PWD} 被替换为当前路径,而 ${SUBSHELL} 由于没有定义,也不是环境变量,所以为空

相关文章

  • Makefile 的一些使用

    今天为了写编译原理的词法分析器,特地写了一下Makefile来简化编译过程,本来打算在子目录放置 Makefile...

  • Linux Kernel Makefiles特殊符号

    Makefile基本规则: Makefile文件中可使用特殊的符号简化Makefile文件的书写。 1、$@:表示...

  • Makefile 学习

    Makefile 一、Makefile 简单使用 Makefile是Linux系统下的一种编译脚本,更快、更方便的...

  • Makefile的基本使用

    Makefile的基本使用 首先需要有一个Makefile文件然后执行make即可完成所有的Makefile中定义...

  • Makefile

    在使用Makefile 编译多个c文件时,出现 Makefile:2:*** missing separator....

  • Makefile简笔记

    一、Makefile 变量 #Makefile变量的使用 objects = main.o input.o cal...

  • Makefile的使用

    Makefile android的Android.mk就是一段段Makefile单元,很多第三方库直接提供make...

  • Makefile入门(九):隐含规则

    隐含规则 在我们使用Makefile时,有一些我们会经常使用,而且使用频率非常高的东西,比如,我们编译C/C++的...

  • Makefile使用

    Makefile 简介 一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干个目录中。makefile定义...

  • 安卓源码总体结构(1)基础知识汇总

    – Makefile (全局的Makefile文件) – bionic (Bionic含义为仿生,这里面是一些基础...

网友评论

      本文标题:Makefile 的一些使用

      本文链接:https://www.haomeiwen.com/subject/nxrjxxtx.html