C++后台开发之makefile撰写
来源:互联网 发布:centos grub引导修复 编辑:程序博客网 时间:2024/06/08 07:40
一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,如何更高效率地编译整个工程,需要用到makefile和make命令工具。makefile中会定义一系列的规则,指定哪些文件需要先编译译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。
makefile带来的好处就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大地提高了软件开发的效率。make命令是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make命令,Visual C++的nmake命令,Linux下GNU的make命令等。可见,利用makefile进行编译,已成为了一种在工程方面的常见编译方法。
现在有3个文件file1.cpp,file2.cpp,file1.h如何编写makefile:
//file1.cpp#include "file1.h"#include <iostream>void print1(){ std::cout<<"Hello, I am in file1!\n";}
//file1.h#ifndef file1_H_#define file1_H_void print1(void);#endif
//file2.cpp#include "file1.h"//void print1(void);int main(){ print1(); return 0;}
makefile文件如下:
#makefiletest: file1.o file2.o g++ file1.o file2.o -o testfile2.o: file2.cpp file1.h g++ -c file2.cppfile1.o: file1.cpp file1.h g++ -c file1.cppclean: rm -f *.o test
在大型工程makefile中,我们习惯把.h文件与.cpp文件分开放到不同的文件夹,甚至需要多级的makefile文件。
lib_BCCencode:=./BCCencode/lib_Process:=./Process/lib_process_data:=./process_data/lib_typeDef:=./typeDef/lib_globalVarINIT:=./VarINIT/libraries:=$(lib_BCCencode) $(lib_Process) $(lib_process_data)\ $(lib_typeDef) $(lib_globalVarINIT)CC:=gccMV:=-mv -u.PHONY:all $(libraries)all:$(libraries) Transmitter$(libraries): $(MAKE) --directory=$@vpath %.o librariesObjects=mainbfBCC.o test.o $(lib_BCCencode)ccoding_byte.o $(lib_Process)bccInterleaverForSig.o\ $(lib_Process)csdForHeLTF.o $(lib_Process)csdForPreamble.o $(lib_Process)generateBasicSig.o\ $(lib_Process)generateHeLTF_csd.o $(lib_Process)generateLTF_csd.o\ $(lib_Process)generatePreamble_csd.o $(lib_Process)generateSig_csd.o $(lib_Process)generateSTF_csd.o\ $(lib_Process)MapForSig.o $(lib_Process)setSigInfo.o\ $(lib_process_data)mcs_table_for_20M.o $(lib_process_data)process_data.o\ $(lib_process_data)BCC_encoder.o $(lib_process_data)Data_CSD.o $(lib_process_data)GenDataAndScramble.o\ $(lib_process_data)GenInit.o $(lib_process_data)modulate.o $(lib_process_data)PilotAdd_SubcarMap.o\ $(lib_typeDef)commonStructure.o $(lib_globalVarINIT)globalVarINIT.oTransmitter:$(Objects) $(CC) -g $(Objects) -lm -o $@ $(MV) $(lib_BCCencode)*.o $(lib_Process)*.o $(lib_process_data)*.o $(lib_typeDef)*.o\ $(lib_globalVarINIT)*.o *.o ./objsmainbfBCC.o:allHeaders.h $(CC) -c -g mainbfBCC.c -o $@test.o:test.c $(CC) -c $< -o $@.PHONY:cleanclean: #-rm *.o #-rm $(lib_BCCencode)*.o #-rm $(lib_Process)*.o #-rm $(lib_process_data)*.o #-rm $(lib_typeDef)*.o #-rm $(lib_globalVarINIT)*.o -rm ./objs/*.o -rm Transmitter -rm csd_*.txt -rm *_csd.txt
该文件中需要注意的几个点:
1.makefile中赋值语句,使用$()操作来调用赋值命令。
lib_BCCencode:=./BCCencode/lib_Process:=./Process/lib_process_data:=./process_data/lib_typeDef:=./typeDef/lib_globalVarINIT:=./VarINIT/libraries:=$(lib_BCCencode) $(lib_Process) $(lib_process_data)\ $(lib_typeDef) $(lib_globalVarINIT)CC:=gccMV:=-mv -u
2.PHONY命令和all命令
.PHONY:all $(libraries)#此处是为了防止文件重名而定义的伪目标all:$(libraries) Transmitter#多个最终目标时,使用all来规范最终目标
3.vpath命令
vpath %.o libraries#表示当前路径找不到.o文件时,在libraries路径下查找.o文件
阅读全文
0 0
- C++后台开发之makefile撰写
- Makefile撰写教程
- Makefile.am文件的撰写
- Linux下C语言开发之Makefile创建
- linux c/c++ 后台开发基础之:c++日志模块
- linux c/c++ 后台开发之—连接池
- linux c/c++ 后台开发之—连接池
- c/c++ 后台开发常用组件之:c++日志模块
- Linux c 开发 - Makefile工具
- C后台开发书籍索引
- 后台撰写、编辑文章操作技巧
- 后台撰写、编辑文章操作技巧
- Makefile模板之 sub.c main.c
- Makefile模板之 sub.c main.c
- Portal开发实践开始撰写
- C++后台开发之我见
- PSP开发--[C++]编译C++的makefile
- Linux下C语言开发(Makefile编写)
- TED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already added R
- TCP/IP(三):IP协议相关技术
- EventBus Q&A
- js技巧收集
- solr学习之-配置中文分词组件mmseg4j
- C++后台开发之makefile撰写
- redis结合springMVC配置和使用一
- TCP的三次握手和四次挥手
- AfxEnableControlCon
- springMVC 知识点整理PART 1(基本概念)
- 软编码Flv 到Mp4 容器(三) flv metadata tag解析
- 守形数(解题报告)
- java调用摄像头拍照,使用webcam-capture替换jmf调用摄像头拍照
- Hibernate中枚举Enum类型的映射策略