您的位置:首页 > 编程语言

Vim编程下自创Makefile模板

2015-01-17 18:18 246 查看

前言

一直都对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 {}\;

一些注意事项

整个Makefile文件都不要使用空格键最为安全,你看到的所有空格其实是有Tab键产生的,一旦使用了空格键,文件是默认空格是编译语言的其中一部分,从而会导致错误的出现。包括在编写注释的时候,也不要用空格,我就是因为图方便用了空格对齐所有的注释,结果,浪费了一个半小时排查原因。
使用-l连接库模块时,不要直接写文件名,要把文件名中开头的lib去掉。例如,源文件是libopencv_core.so,在连接时使用-lopencv_core.
多个连接模块,使用空格分开。
以上都只是编译过程的Makefile配置方法,当程序需要运行时,还需要把动态链接库放到/usr/local/lib中,然后命令行输入ldconfig,这样才可以使得可执行文件可以单独运行。

转载请注明出处:/article/7693277.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: