makefile
-
借此机会重新复习下gcc编译条件
- 命令 -E 预处理命令 生成 .i 预处理的原始程序
-S 翻译成汇编 生成 .s 汇编文件
-c 汇编转换为二进制文件 生成.o 二进制文件
-o 指定生成文件的名字
- 命令 -E 预处理命令 生成 .i 预处理的原始程序
-
makefile文件是区分大小写的
-
最简单的版本 第一版本
make:
g++ -o a.o -c a.cpp
g++ -o b.o -c b.cpp
g++ -o main.o -c main.o
g++ -o test a.o b.o main.cpp
clean:
rm -rf a.o b.o main.o -
第二版本 用变量去替换
cc = g++
make:
$(cc) -o main.o -c main.cpp
$(cc) -o a.o -c a.cpp
$(cc) -o b.o -c b.cpp
$(cc) -o test a.o b.o main.o
clean:
rm -rf a.o b.o main.o -
第三版本
版本3可以在每次编译的事后只编译修改过的文件 节省时间
采用依赖的方式
start:
$(cc) -o test a.o b.o main.o
a.o:
$(cc) -o a.o -c a.cpp
b.o:
$(cc) -o b.o -c b.cpp
main.o:
$(cc) -o main.o -c main.cpp
clean:
rm -rf a.o b.o main.o -
第四版本
将编译条件改为变量 这样如果以后要修改编译条件的话只需要修改一个地方就可以了
这里也是和上面一样
SRSC 表示源文件
OBJS表示.o文件
OBJS = $(SRCS:.cpp=.o) 把所有的源文件.cpp替换为.o
vpath: 用这种方式来确认文件所在的文件位置
其表示“.c”结尾的文件,先在“foo”目录,然后是“blish”,最后是“bar”目录
- 其中添加了boost编译选项
^ 表示所有的依赖文件
? 表示比目标还要新的依赖文件列表
vpath %.cpp /root/NewFrameTest/Source
vpath %.h /root/NewFrameTest/Head
LDDIR = -lboost_system -lboost_thread
CC = g++
SRCS =AsyncSerial.cpp\
EtcStatus_B0.cpp\
EtcStatus_B4.cpp\
EtcStatus_C0.cpp\
SendDate.cpp\
SerialTransceiver.cpp\
BufferedAsyncSerial.cpp\
EtcContext.cpp\
EtcStatus_B2.cpp\
EtcStatus_B5.cpp\
EtcStatus_Init.cpp\
MsgQueue.cpp\
Serial.cpp\
STLogger.cpp\
EtcManager.cpp\
EtcStatus_B3.cpp\
EtcStatusBase.cpp\
main.cpp\
NothingSerialize.cpp\
Serialize.cpp\
TcpTransceiver.cpp
OBJS = $(SRCS:.cpp=.o)
EXEC = test
make:$(OBJS)
#$(CC) -o $(EXEC) $(OBJS) -lboost_system -lboost_thread
$(CC) -o $(EXEC) $(OBJS) $(LDDIR)
.cpp.c:
$(CC) -o $@ -c $<
clean:
rm -rf $(OBJS)
网友评论