原文地址:blog.csdn.net/ghostyu/article/details/7755177

1、目标名称,摆脱手动设置目标名称

  1. TARGET = $(notdir $(CURDIR))
  2. all:$(TARGET)
  3. CMD....

$(CURDIR) 表示Makfile当前目录全路径

$(notdir $(path)) 表示把path目录去掉路径名,只留当前目录名
这样就可以得到Makefile当前目录名称,用目录名作为目标程序名是一个不错的选择

2、使用include,把所有Makefile共享的设置包含进来

  1. BASE_DIR = /root/DM36x
  2. include $(BASE_DIR)/Rules.make
  3. XDC_PATH = $(DMAI_INSTALL_DIR)/packages
  1. DMAI_INSTALL_DIR在Rules.make中已经设置过,这样,需要使用DMAI_INSTALL_DIR变量的时候只要include 这个Rules.make接可以了

3、遍历遍历所有特定的源文件

  1. SOURCES = $(wildcard *.c)
  2. HEADERS = $(wildcard *.h)

如果当前目录先有 main.c  func.c  func.h

这样SOURCES变量就等于main.c  func.c

HEADERS变量就等于func.h

这样就每次添加源文件后 就不需要重新修改makefile了

4、替换文件名称

  1. OBJFILES = $(SOURCES:%.c=%.o)

如果SOURCES等与3中的main.c和func.c

这样OBJFILES就等于main.o func.o

同样摆脱了手动修改编译的中间文件名

5、交叉编译设置

  1. VERBOSE = @
  2. COMPILE.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(C_FLAGS) $(CPP_FLAGS) -c
  3. LINK.c = $(VERBOSE) $(MVTOOL_PREFIX)gcc $(LD_FLAGS)

6、编译

  1. $(OBJFILES):    %.o: %.c $(HEADERS)
  2. @echo Compiling $@ from $<..
  3. $(COMPILE.c)  -o $@ $<

7、

  1. install:    $(if $(wildcard $(TARGET)), install_$(TARGET))
  2. install_$(TARGET):
  3. @install -d $(EXEC_DIR)
  4. @install $(TARGET) $(EXEC_DIR)
  5. @install $(TARGET).txt $(EXEC_DIR)
  6. @echo
  7. @echo Installed $(TARGET) binaries to $(EXEC_DIR)..

先判断当前目录是否有$(TARGET),如果有,就执行伪目标install_$(TARGET),这个展开了就相当于install_app,如果$(TARGET)等于app的话

常见makefile写法的更多相关文章

  1. theos的makefile写法

    theos的makefile写法与其他linux/unix环境下的makefile写法大同小异,但是对于makefile不熟悉的在导入一些dylib或者framework的时候就会变得很蛋疼. 对于f ...

  2. js函数常见的写法以及调用方法

    写在前面:本文详细的介绍了5中js函数常见的写法以及调用的方法,平时看别人代码的时候总是看到各种不同风格的js函数的写法.不明不白的,找了点资料,做了个总结,需要的小伙伴可以看看,做个参考.1.常规写 ...

  3. Makefile之写demo时的通用Makefile写法

    Makefile之写demo时的通用Makefile写法[日期:2013-05-22] 来源:CSDN  作者:gqb666 [字体:大 中 小] 前面的一篇文章Makefile之大型工程项目子目录M ...

  4. 大型工程多个目录下的Makefile写法

    1.前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile.关于Makefile的详细内容可以参考网上流传非常广泛的<跟我一起写Ma ...

  5. 常见的makefile写法【转】

    转自:http://blog.csdn.net/ghostyu/article/details/7755177 版权声明:本文为博主原创文章,未经博主允许不得转载. .目标名称,摆脱手动设置目标名称 ...

  6. 【APUE】Chapter16 Network IPC: Sockets & makefile写法学习

    16.1 Introduction Chapter15讲的是同一个machine之间不同进程的通信,这一章内容是不同machine之间通过network通信,切入点是socket. 16.2 Sock ...

  7. linux下通用Makefile写法

    linux编译多个源文件的程序比较麻烦,这下就需要通用的Makefile了,编译的时候执行一下make命令就OK,下面介绍通用makfile的写法. 假设现在有以下源文件:file1.h file1. ...

  8. gcc编译, gdb调试, makefile写法

    //test.c: #include <stdio.h> int main(void) { printf("hello world!"); return 0; } == ...

  9. 转来的 cuda makefile 写法学习

    原文作者:FreeAquar 原文出处:http://www.cnblogs.com/FreeAquar/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给 ...

随机推荐

  1. 宣布发布 Windows Azure SDK 2.2,正式发布 Windows Azure Backup 和 Hyper-V 恢复管理器预览版

    开发人员正逐渐转向云计算,因为它具有众多优势,包括成本.自动化和让开发人员专注于应用程序逻辑的能力.我们很高兴地宣布,继推出 Visual Studio 2013 之后,今天将发布 Windows A ...

  2. 开源项目live555学习心得

      推荐:伊朗美女找丈夫比找工作难女人婚前一定要看清三件事 × 登录注册   疯狂少男-IT技术的博客 http://blog.sina.com.cn/crazyboyzhaolei [订阅][手机订 ...

  3. HDU 1848 Fibonacci again and again

    题解:尼姆博弈,对于1至1000计算SG函数,每次取最小的前继值,SG值异或为0则为P-position. #include <cstdio> #include <cstring&g ...

  4. How many prime numbers(求素数个数)

    How many prime numbers Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  5. http协议与http代理

    TCP/IP协议族 TCP/IP(Transmission Control Protocol/InternetProtocol.传输控制协议/网际协议)是用于计算机通信的一个协议族. TCP/IP协议 ...

  6. js 模板引擎 jade使用语法

    Jade是一款高性能简洁易懂的模板引擎,Jade是Haml的Javascript实现,在服务端(NodeJS)及客户端均有支持. 功能 · 客户端支持 · 超强的可读性 · 灵活易用的缩进 · 块扩展 ...

  7. Smarterer Test

    1.Using xp can swap two characters 2.In normal mode, use /abc/+4 can find the string "abc" ...

  8. [Swust OJ 771]--奶牛农场(几何题,画图就好)

    题目链接:http://acm.swust.edu.cn/problem/771/    Description 将军有一个用栅栏围成的矩形农场和一只奶牛,在农场的一个角落放有一只矩形的箱子,有一天将 ...

  9. 杭电ACM水仙花数

    水仙花数 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  10. C、C++中“*”操作符和“后++”操作符的优先级

    假设有如下的定义 char carr[] = {"test"}; char cp = carr; 那么表达式 *cp++; 的右值是什么呢? 这个表达式在数组遍历的程序中非常常见, ...