zoukankan      html  css  js  c++  java
  • 一个项目的Makefile编写及调试

    父Makefile

    在src目录下包含很多文件夹,那么需要遍历所有的目录执行Makefile,那么给一个在src目录下的Makefile。

    # 需要排除的目录
    
    exclude_dirs := include bin
    
    # 取得当前子目录深度为1的所有目录名称
    
    DIRS := $(shell find . -maxdepth 1 -type d)
    
    DIRS := $(basename $(patsubst ./%,%,$(DIRS)))
    
    DIRS := $(filter-out $(exclude_dirs),$(DIRS))
    
    .PHONY: release clean
    
    release:
    
        @for x in $(DIRS); 
    
        do 
    
            make -C $$x; 
    
        done
    
    clean:
    
        @for x in $(DIRS); 
    
        do 
    
            make -C $$x $@; 
    
        done
    调试Makefile

    再编写一个调试文件var.mk,内容如下:

    %:

    @echo '$*=$($*)'

    d-%:

    @echo '$*=$($*)'

    @echo ' origin = $(origin $*)'

    @echo ' value = $(value $*)'

    @echo ' flavor = $(flavor $*)'

    查看变量

    make -f test.mk -f var.mk OBJS

    make -f test.mk -f var.mk d-CFLAGS

    说一说”d-” 前缀(其意为details),其中调用了下面三个参数。

    • $(origin):告诉你这个变量是来自哪儿,file表示文件,environment表示环境变量,还有environment override,command line,override,automatic等。
    • $(value):打出这个变量没有被展开的样子。比如上述示例中的 foo 变量。
    • $(flavor):有两个值,simple表示是一般展开的变量,recursive表示递归展开的变量

    比如查看DIRS变量:

    Image

    Image(1)

    子Makefile

    子目录中Makefile就比较简单了,如下就可以:

    Image(2)

    所有源码都可以在项目https://github.com/jacksu/design_pattern中找到。

    参考文档

    http://coolshell.cn/articles/3790.html

    http://www.cnblogs.com/AlphaDu/articles/1363925.html

    http://www.gnu.org/software/make/manual/make.html

  • 相关阅读:
    SpringMVC
    SpringMVC
    SpringMVC
    SpringMVC
    JavaWeb
    SpringMVC
    SpringMVC
    Spring
    Spring
    Spring
  • 原文地址:https://www.cnblogs.com/jacksu-tencent/p/3866727.html
Copyright © 2011-2022 走看看