常见makefile写法

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

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

[cpp] view plaincopy

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

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

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

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

[cpp] view plaincopy

  1. BASE_DIR = /root/DM36x
  2. include $(BASE_DIR)/Rules.make
  3. XDC_PATH = $(DMAI_INSTALL_DIR)/packages

[cpp] view plaincopy

  1. DMAI_INSTALL_DIR在Rules.make中已经设置过,这样,需要使用DMAI_INSTALL_DIR变量的时候只要include 这个Rules.make接可以了

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

[cpp] view plaincopy

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

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

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

HEADERS变量就等于func.h

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

4、替换文件名称

[cpp] view plaincopy

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

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

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

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

5、交叉编译设置

[cpp] view plaincopy

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

6、编译

[cpp] view plaincopy

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

7、

[cpp] view plaincopy

  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的话

时间: 2024-11-05 18:42:24

常见makefile写法的相关文章

函数常见的写法及调用方法整理

我们平时在阅读别人的代码的时候,总能看到别人在写函数的时候,有各种不同的写法及调用方法,今天就总结下我所遇到过的函数常见的写法及调用方法. 一.函数声明 // 函数的写法 function sum(a, b) { return a + b; } // 调用 sum(1,2); // 3  二.函数表达式 // 函数的写法 var sum = function (a, b) { return a + b; } // 调用 sum(2, 3); // 5 三.将方法作为一个对象 // 作为对象方法,

gcc编译, gdb调试, makefile写法

//test.c: #include <stdio.h> int main(void) { printf("hello world!"); return 0; } ====================================== 一. 1. 编译过程:预处理(processing)->编译(compilation)->汇编(assembly)->Linking 2. 预处理: gcc -E test.c -o test.i / gcc -E t

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

1.前言 目前从事于linux下程序开发,涉及到多个文件,多个目录,这时候编译文件的任务量比较大,需要写Makefile.关于Makefile的详细内容可以参考网上流传非常广泛的<跟我一起写Makefile>http://blog.csdn.net/haoel/article/details/2886/,作者是个大牛,非常佩服. 2.简单测试 测试程序在同一个文件中,共有func.h.func.c.main.c三个文件,Makefile写法如下所示: 1 CC = gcc 2 CFLAGS =

“makefile”写法详解,一步一步写一个实用的makefile,详解 sed &#39;s,$?\.o[ :]*,\1.o [email&#160;protected] : ,g&#39; &lt; [email&#160;protected]

目的:编写一个实用的makefile,能自动编译当前目录下所有.c/.cpp源文件,支持二者混合编译.并且当某个.c/.cpp..h或依赖的源文件被修改后,仅重编涉及到的源文件,未涉及的不编译. 二要达到这个目的,用到的技术有:1-使用wildcard函数来获得当前目录下所有.c/.cpp文件的列表.2-make的多目标规则.3-make的模式规则.4-用gcc -MM命令得到一个.c/.cpp文件include了哪些文件.5-用sed命令对gcc -MM命令的结果作修改.6-用include命

【APUE】Chapter16 Network IPC: Sockets &amp; makefile写法学习

16.1 Introduction Chapter15讲的是同一个machine之间不同进程的通信,这一章内容是不同machine之间通过network通信,切入点是socket. 16.2 Socket Descriptors socket抽象上是一个communication endpoint,具体就是一个int型变量.生成socket的函数如下: int socket(int domain, int type, int protocol) 函数有点儿类似open,即打开一个socket d

[Makefile]多目录Makefile写法

最近需要写一个测试程序,这个测试程序需要集成一些功能,写在同一个文件看上去很不好,多个文件的Makefile又不是很熟,于是分享下面这篇文章 转自:http://blog.csdn.net/yuzhihui_no1/article/details/44810357 前面已经分享了单目录项下多文件的makefile的编写,现在来看看多目录下多文件makefile的编写: 在做项目时,一般文件都会分几个目录来存放:基本的是  include/  bin/ src/ obj/ lib/ tools/,

Makefile写法

概述 -- 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂.这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义.特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力. 因为,makefile关系到了整个工程的

静态库和动态库的两种不同的Makefile写法

动态库 PROG=add BIN=$(PROG).bin SOADD= lib$(PROG).so SHAREDOBJS= $(PROG).o OBJS= main.o CC=gcc $(PROG):$(SOADD) $(OBJS) $(CC) $(OBJS) $(SOADD) -o $(PROG) $(SOADD):$(SHAREDOBJS) $(CC) -shared $(SHAREDOBJS) -o $(SOADD) %.o:%.c $(CC) -c -fpic -o [email pro

as3中一些不常见的写法

mc.gotoAndPlay(Math.random()*10>>0); Math.random()*10 取10以内带小数的随机数.>>0 的功能去除小数点后的数,所以 Math.random()*10>>0 即获取10以内的随机整数 if(i&1){} i&1 的意思就是判断i是奇数还是偶数奇数2进制最后一位1, i&1=1 真偶数2进制最后一位0, i&1=0 假 var a:Array = new Array(); for (va