makefile一例

尝试编写了第一个makefile,此makefile支持:

1、源码、编译中间文件、目标文件 区分目录存放;

2、程序A、程序B分开编译,公用部分自动编译;

 1 CC = g++
 2 ifeq ($(cpu), arm)
 3     CC := arm_g++
 4 endif
 5
 6 CURR_DIR = $(shell pwd)
 7 OBJ_DIR  = build
 8 BIN_DIR  = bin
 9 VPATH    = code : code/aa : code/bb
10 CXXFLAGS = -I$(CURR_DIR)/code/platform -I$(CURR_DIR)/code
11
12
13 #
14 libSource = $(notdir $(wildcard code/*.cpp))
15 libObjs = $(libSource:%.cpp=$(OBJ_DIR)/%.o)
16
17 $(libObjs): $(OBJ_DIR)/%.o : %.cpp
18     $(CC)  -c $(CXXFLAGS) $< -o [email protected]
19
20 #make aa
21 aaSource = $(notdir $(wildcard code/aa/*.cpp))
22 aaObjs = $(aaSource:%.cpp=$(OBJ_DIR)/%.o)
23
24 aa: $(aaObjs) $(libObjs)
25     $(CC)  -o $(BIN_DIR)/[email protected] $^
26     @echo done
27
28 $(aaObjs): $(OBJ_DIR)/%.o : %.cpp
29     $(CC)  -c $(CXXFLAGS) $< -o [email protected]
30
31
32 #make bb
33 bbSource = $(notdir $(wildcard code/bb/*.cpp))
34 bbObjs = $(bbSource:%.cpp=$(OBJ_DIR)/%.o)
35
36 bb: $(bbObjs) $(libObjs)
37     $(CC)  -o $(BIN_DIR)/[email protected] $^
38     @echo done
39
40 $(bbObjs): $(OBJ_DIR)/%.o : %.cpp
41     $(CC)  -c $(CXXFLAGS) $< -o [email protected]
42
43
44 #make clean
45 .PHONY : clean
46 clean:
47     rm -fr $(OBJ_DIR)/*.o
48
49
50
51 #打印变量
52 #一种方式:$(shell echo $(aaObjs) > readme.txt )
53 show:
54     @echo "CC        : "$(CC)
55     @echo "curr dir  : "$(CURR_DIR)
56 #命令tab开头
57 #@echo时命令不显示,echo时命令显示
58
59 #赋值
60 # = 是最基本的赋值(类似宏替换)
61 # := 是覆盖之前的值(类似C语句)
62 # ?= 是如果没有被赋值过就赋予等号后面的值
63 # += 是添加等号后面的值
64
65 #函数调用
66 # return = $(functionname  arg1,arg2,arg3...)
67 # wildcard  返回文件名,包括路径,例如:SRC = $(wildcard *.c ./foo/*.c)
68 # notdir 去除文件路径,例如:SRC = $(notdir wildcard)
69 # patsubst 替换,例如:OBJ = $(patsubst %.c %.o $(SRC))
70
71 #指定源文件路径
72 # VPATH = dir1 : dir2
73 # 另外vpath用来定义查找的路径与匹配的模式
74
75 #静态模式
76 # <targets ...>: <target-pattern>: <prereq-patterns ...>
77 # <commands>
78 # $< 表示所有的依赖目标集
79 # [email protected] 表示目标集
时间: 2024-11-09 10:38:38

makefile一例的相关文章

一个平时写程序通用的Makefile样例

//需要目标名和程序名字相同 .PHONY:clean all //伪目标 CC=gcc CFLAGS=-Wall -g BIN= //目标 all:$(BIN) %.o:%.c $(CC) $(CFLAGS) -c $< -o [email protected] clean: rm -f *.o $(BIN) 平时写程序肯定需要反复的修改,有了这样一个makefile程序会方便很多的.动手试一下.

一个通用Makefile的编写

作者:杨老师,华清远见嵌入式学院讲师. 我们在Linux环境下开发程序,少不了要自己编写Makefile,一个稍微大一些的工程下面都会包含很多.c的源文件.如果我们用gcc去一个一个编译每一个源文件的话,效率会低很多,但是如果我们可以写一个Makefile,那么只需要执行一个make就OK了,这样大大提高了开发效率.但是Makefile的语法规则众多,而且缺乏参考资料,对于初学者来说,写起来还是有一定的难度,往往令很多人望而生畏.下面我们介绍一个比较通用而且简洁的Makefile,大家只要对它稍

通用Makefile

本文推荐了一个用于对 C/C++ 程序进行编译和连接以产生可执行程序的通用 Makefile. 在使用 Makefile 之前,只需对它进行一些简单的设置即可:而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动 Makefile.因此,即便是一个没有学习过 Makefile 书写规则的人,也可以为自己的 C/C++ 程序快速建立一个可工作的 Makefile. 这个 Makefile 可以在 GNU Make 和 GCC 编译器下正常工作.但是不能保证对于其它版本的 Make 和编译器

Linux内核Makefile文件(翻译自内核手册)

转载自:http://www.cnblogs.com/jason-lu/p/3728198.html --译自Linux3.9.5 Kernel Makefiles(内核目录documention/kbuild/makefiles.txt) kbuild(kernel build) 内核编译器 This document describes the Linux kernel Makefiles 本文当介绍了Linux内核的Makefile === Table of Contents=== 目录

粗浅谈论makefile

主要参考:跟我一起写makefile  点击打开链接 Makefile简介: 简单的说,一个大的工程中的源文件不计其数,其按照不同的类型,功能,模块放在了不同的目录之中,makefile则是定义了一些规则来指定,哪些文件需要先编译,哪些需要后编译,哪些需要重新编译,而makefile带来的好处就是,一旦写好,之后一个make命令 就可以搞定,极大的提高了软件的开发. 简述编译链接: 无论选择什么语言c,c++都需要将源文件编译成为中间代码文件,在windows下面是.obj文件,而unix则是.

makefile 浅谈

跟我一起写MakefilePDF:下载文件 Makefile简介: 简单的说,一个大的工程中的源文件不计其数,其按照不同的类型,功能,模块放在了不同的目录之中,makefile则是定义了一些规则来指定,哪些文件需要先编译,哪些需要后编译,哪些需要重新编译,而makefile带来的好处就是,一旦写好,之后一个make命令 就可以搞定,极大的提高了软件的开发. 简述编译链接: 无论选择什么语言c,c++都需要将源文件编译成为中间代码文件,在windows下面是.obj文件,而unix则是.o文件,这

向大家推荐一个C/C++通用Makefile

在使用 Makefile 之前,只需对它进行一些简单的设置即可:而且一经设置,即使以后对源程序文件有所增减一般也不再需要改动 Makefile.因此,即便是一个没有学习过 Makefile 书写规则的人,也可以为自己的 C/C++ 程序快速建立一个可工作的 Makefile. 这个 Makefile 可以在 GNU Make 和 GCC 编译器下正常工作.但是不能保证对于其它版本的 Make 和编译器也能正常工作. 此 Makefile 的使用方法如下: 程序目录的组织  尽量将自己的源程序集中

深入理解linux源码安装三板斧

概述: 根据源码包中 Makefile.in 文件的指示,configure 脚本检查当前的系统环境和配置选项,在当前目录中生成 Makefile 文件(还有其它本文无需关心的文件),然后 make 程序就按照当前目录中的 Makefile 文件的指示将源代码编译为二进制文件,最后将这些二进制文件移动(即安装)到指定的地方(仍然按照 Makefile 文件的指示). configure过程: 此阶段的主要目的是生成 Makefile 文件,是最关键的运筹帷幄阶段,基本上所有可以对安装过程进行的个

linux下利用gcc编译C和C++

gcc ------->默认编译c文件(gcc  xxx  -lstdc++链接到c++库编译c++,g++默认编译c++) 一.CC编译程序过程分四个阶段◆ 预处理(Pre-Processing)◆ 编译(Compiling)◆ 汇编(Assembling)◆ 链接(Linking) 1.1 预处理(Pre-Processing) gcc -E test.c -o test.i 或 gcc -E test.c 可以输出test.i文件中存放着test.c经预处理之后的代码.打开test.i文件