zoukankan      html  css  js  c++  java
  • 常见的makefile写法【转】

    转自:http://blog.csdn.net/ghostyu/article/details/7755177

    版权声明:本文为博主原创文章,未经博主允许不得转载。
    
    1、目标名称,摆脱手动设置目标名称
    
    [cpp] view plain copy
    
        TARGET = $(notdir $(CURDIR))  
        all:$(TARGET)  
            CMD....  
    
    $(CURDIR) 表示Makfile当前目录全路径
    
    $(notdir $(path)) 表示把path目录去掉路径名,只留当前目录名
    这样就可以得到Makefile当前目录名称,用目录名作为目标程序名是一个不错的选择
    
    2、使用include,把所有Makefile共享的设置包含进来
    
    [cpp] view plain copy
    
        BASE_DIR = /root/DM36x  
        include $(BASE_DIR)/Rules.make  
          
        XDC_PATH = $(DMAI_INSTALL_DIR)/packages  
    
    [cpp] view plain copy
    
        DMAI_INSTALL_DIR在Rules.make中已经设置过,这样,需要使用DMAI_INSTALL_DIR变量的时候只要include 这个Rules.make接可以了  
    
    3、遍历遍历所有特定的源文件
    
    [cpp] view plain copy
    
        SOURCES = $(wildcard *.c)  
        HEADERS = $(wildcard *.h)  
    
    如果当前目录先有 main.c  func.c  func.h 
    
    这样SOURCES变量就等于main.c  func.c
    
    HEADERS变量就等于func.h
    
    这样就每次添加源文件后 就不需要重新修改makefile了
    
    4、替换文件名称
    
    [cpp] view plain copy
    
        OBJFILES = $(SOURCES:%.c=%.o)  
    
    如果SOURCES等与3中的main.c和func.c
    
    这样OBJFILES就等于main.o func.o 
    
    同样摆脱了手动修改编译的中间文件名
    
    5、交叉编译设置
    
    [cpp] view plain copy
    
        VERBOSE = @  
        COMPILE.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(C_FLAGS) $(CPP_FLAGS) -c  
        LINK.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(LD_FLAGS)  
    
    
    6、编译
    
    [cpp] view plain copy
    
        $(OBJFILES):    %.o: %.c $(HEADERS)   
          
            @echo Compiling $@ from $<..  
          
            $(COMPILE.c)  -o $@ $<  
    
    7、
    
    [cpp] view plain copy
    
        install:    $(if $(wildcard $(TARGET)), install_$(TARGET))  
        install_$(TARGET):  
            @install -d $(EXEC_DIR)  
            @install $(TARGET) $(EXEC_DIR)  
            @install $(TARGET).txt $(EXEC_DIR)  
            @echo  
            @echo Installed $(TARGET) binaries to $(EXEC_DIR)..  
    
    先判断当前目录是否有$(TARGET),如果有,就执行伪目标install_$(TARGET),这个展开了就相当于install_app,如果$(TARGET)等于app的话
  • 相关阅读:
    前端之多行省略号显示...
    关于跨域的那点事情
    前端之碰到数组等基础类型改变而试图无更新
    前端小记之vue下载二进制文件
    防抖和节流
    前端小记之style三元运算符
    Django之坑TemplateDoesNotExist
    MYSQL之net start mysql 1067报错
    vscode之创建django项目
    phpstorm使用mysql出现timezone问题
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/7211730.html
Copyright © 2011-2022 走看看