Makefile编译文件
来源:互联网 发布:漫画本子在淘宝怎么搜 编辑:程序博客网 时间:2024/06/10 02:36
make工程管理器根据时间戳来确定需要编译的文件,通过读入Makefile文件的内容来执行大量的编译工作。
管理较多的文件
Makefile结构:
hello.o :hello.c
gcc -c hello.c -o hello.o
(目标文件:依赖文件,命令前加上TAB,且在目标文件之后)
makefile命名方式:
Makefile、makefile、GNUmakefile 名字.mk 名字.Linux 名字.AIX
执行方式:
前三种命名方式:make make将只编译改动的代码文件,而不用完全编译
后三种命令方式:make -f 文件名
Makefile主要包含5部分:显示规则、隐式规则、变量、条件语句、函数(这5类中都可能结合正则表达式使用)
使用makefile过程中需要关心两种文件:.c文件 .o文件
预处理:gcc -E 1.c -o 1.i
编译:gcc -S 1.i -o 1.s
汇编:gcc -c 1.s -o 1.o 前三个过程合到一起:gcc -c 1.c -o 1.o
链接:gcc 1.o -o 可执行文件名
显示规则语法:
目标文件:目标的依赖文件
生成目标文件的命令
自定义头文件:函数声明、系统头文件、宏定义、类型定义
在makefile中如果需要执行命令,必须以tab开头并且必须要在目标或者伪目标下出现.
伪目标文件如果出现在Makefile文件中部或者尾部默认不执行,如果放在Makefile文件的开头则无条件执行伪目标。
makefile变量定义:
变量 = 内容
几种使用方式:
var=a(递归展开) / var+=a(添加新值) /var:=a(简单方式) / var?=a(如果没有被定义过,那么var就是a,
如果被定义过就什么也不做)
---------------------
引用: ${变量名} $(变量名)
OBJ = main.o score.o
CC=gcc
abc:${OBJ}
$(CC) $(OBJ) -o abc 变量名用()或者{}括起来
main.o:head.h
score.o:head.h
.PHONY:clean
#clean叫做伪目标文件
clean:
rm *.o abc
-------------
OBJ=main.o score.o
CC = gcc
FLAGS = -c -o
stu:$(OBJ)
$(CC) $(OBJ) -o stu
# $^代表的是所有依赖文件
# $<代表的是第一个依赖文件
# $@代表目标文件
# $?代表时间戳比目标文件晚的依赖文件,并以空格分开
main.o:main.c 1.c
$(CC) $< $(FLAGS) $@
echo $<
score.o:score.c
$(CC) $^ $(FLAGS) $@
clean:
rm *.o stu
---------------------------------
查看makefile文件中的内置变量: make -p Makefile > 任意一个文件名
条件语句:
ifeq (字符串1,字符串2) 如果两个字符串相等则条件成立
ifeq(arg1,arg2)或者ifeq "arg1","arg2"
else ...
endif
ifdef 变量 判断变量是否初始化,这里的变量不能使用$
函数:使用规则为 $(函数名 参数1,参数2,参数3,....,参数n)
makefile显示规则:
abc:main.o fun.o
gcc main.o fun.o -o abc
main.o:main.c
gcc -c main.c -o main.o
fun.o:fun.c
gcc -c fun.c -o fun.o
clean:
rm main.o fun.o abc
makefile隐式规则:(只写头尾)
abc:main.o fun.o
gcc main.o fun.o -o abc
main.c:1.h
fun.c:1.h
clean:
rm main.o fun.o abc
Makefile总控:同时make多种Makefile文件
$(MAKE) -C read (-C用来切换路径,切换到read路径下并执行MAKE)
echo $MAKE 结果为make
实际项目中的Makefile:
#export PATH=$PATH:../Compiler/gcc-4.2.171-eglibc-2.5.171/powerpc-linux-gnu/bin
#CC = powerpc-linux-gnu-gcc
#AR = powerpc-linux-gnu-ar
CC = gcc
CFLAGS = -Wall
OBJS = test.o
PGM = test
all: $(PGM)
#$(OBJS):%.o:%.c
# $(CC) $(CFLAGS) $< libLT_CB.a -o $@
$(PGM):$(OBJS) libLT_CB.a
$(CC) -o $(PGM) -lm $^
clean:
rm -f test *.o
#CC = powerpc-linux-gnu-gcc
#AR = powerpc-linux-gnu-ar
CC = gcc
CFLAGS = -Wall
OBJS = test.o
PGM = test
all: $(PGM)
#$(OBJS):%.o:%.c
# $(CC) $(CFLAGS) $< libLT_CB.a -o $@
$(PGM):$(OBJS) libLT_CB.a
$(CC) -o $(PGM) -lm $^
clean:
rm -f test *.o
阅读全文
0 0
- 交叉编译Makefile文件
- 多文件编译 makefile
- Makefile编译Java文件
- makefile多文件编译
- Makefile编译文件
- makefile如何指定编译文件
- Makefile 编译多个文件
- gcc/g++编译makefile文件
- 用makefile编译C文件
- Makefile编译目录下多个文件
- makefile 自动编译所有文件
- Makefile-----编译目录下多个文件
- makefile编译所有cpp文件
- makefile之多目录文件编译
- makefile简单多文件编译
- 华行编译文件Makefile
- 使用Makefile编译Java文件
- 编译proc程序可用makefile文件(转)
- Linux扩展根目录下的空间
- 向上转型和向下转型
- [转载链接]五大常用算法之一:分治法
- 基于App-Hub实现微应用架构
- 在线云评测系统日志(九):进行代码的编译
- Makefile编译文件
- 静态分派和动态分派
- Android build error on Ubuntu 16.04 LTS
- aircrack-ng/airdrop-ng
- 【linux 命令】Linux 下常用压缩文件的解压、压缩
- 一道关于fork和printf的面试题
- Opencv数据结构Mat详解
- HDU5461-思维
- 欢迎您在新浪博客安家