Vim编程下自创Makefile模板

前言

       一直都对Linux和Vim情有独钟,其实windows也很不错,因为工作上难免有些情况只能使用windows进行开发,包括有些API或者SDK都只有windows版本,只是用Linux的时候就感觉和计算机特别亲近的感觉,哈哈哈,夸张而言。

       至于Vim(这里暂且不讨论vim和emacs谁更好的问题,这个是哲学问题),对比起大多数人估计都习惯使用IDE进行编程,使用vim确实难度会大很多,所以,如果不是专业的开发人员,其实也没有必要使用vim编程,不过有时候想,如果当年大学的编程课教的不是使用IDE编程而是文本编辑器编程,估计对于很多热爱开发的人员来说,效率会高很多,因为用IDE总有很多你完全不知道为什么都错误出现,我也是经过了很长一段时间的积累,加上看了《C++对象模型》和使用了Vim编程之后才慢慢理解了曾经“无厘头”的错误。

       最重要的是,一旦精通了Linux下使用Vim编程,从此那些关于链接库和头文件链接的问题都会迎刃而解。

 

Makefile是什么

       相信如果不用IDE编程的话,必须要会的就是如何使用Makefile去连接头文件、库文件和源文件。

       网上有像《Makefile经典教程》这样的教程,不过话说,我自己也看到不少于三遍也没有完全记住,但实际使用中,其实也不是全部都用得上,即使是在大型的团队合作项目中,同时使用多个我提供的Makefile模板也足够应付了,那些高级的功能(如变量、函数使用)更多的是应用于编写SDK或API或者函数库中才会使用到。

 

我的Makefile模板

#Makefile file
DIR_INC = ./include #所有头文件放到此处
DIR_SRC = ./scr #所有源文件放到此处
DIR_OBJ = ./obj #所有中间件文件放到此处
DIR_BIN = ./bin #生成的文件放到此处
DIR_3RD = ./3party #第三方库的头文件放到此处
DIR_LIB = ./lib #第三方库文件的链接库放到此处

SRC = $(wildcard ${DIR_SRC}/*.cc)
OBJ = $(patsubst %.cc,${DIR_OBJ}/%.o,$(notdir ${SRC}))

TARGET = mian #生成的文件名

BIN_TARGET = ${DIR_BIN}/${TARGET}
CC = g++
CXXFLAGS = -g -Wall -I${DIR_INC} -I${DIR_3RD}
LDFLAGS = -L${DIR_LIB}
LIBS= -lopencv_core -lopencv_highgui #链接库模块,使用空格隔开多个文件

${BIN_TARGET} : ${OBJ}
    $(CC) $(OBJ) -o $@ $(LDFLAGS) $(LIBS)

${DIR_OBJ}/%.O:${DIR_SRC}/%.cc
    $(CC) $(CXXFLAGS) -c $< -o $@
.phony:clean
clean:
    find ${DIR_OBJ} -name *.o -exec rm -rf {}\;
 

一些注意事项

  1. 整个Makefile文件都不要使用空格键最为安全,你看到的所有空格其实是有Tab键产生的,一旦使用了空格键,文件是默认空格是编译语言的其中一部分,从而会导致错误的出现。包括在编写注释的时候,也不要用空格,我就是因为图方便用了空格对齐所有的注释,结果,浪费了一个半小时排查原因。
  2. 使用-l连接库模块时,不要直接写文件名,要把文件名中开头的lib去掉。例如,源文件是libopencv_core.so,在连接时使用-lopencv_core.
  3. 多个连接模块,使用空格分开。

 

转载请注明出处:http://blog.csdn.net/luoyun614/article/details/42806875

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。