已经在csdn注册了有一段时间,本来想在这写写自己的技术心得,但是工作后,越发觉得没时间(可能也是我的借口吧),于是也搁置了。今天却突然想开始写了,写的东西或许比较简单,但也算是自己的一点心得吧。今天的主题是<<Makefile>>。
相信每一个做Linux后台服务器的同事都会知道Makefile。makefile最大的好处就是自动化编译,一旦写好,只要一个make命令,整个工程就完全自动编译,极大了提高了软件开发的效率。下面是我自己写的一个makefile文件,虽然比较小,但麻雀虽小,五脏俱全。
DIR_INC=/usr/local/include
DIR_LIB=/usr/local/lib
DEPS=$(wildcard *.h)
INC_CURL=-I$(DIR_INC)/curl
#
#MORE INCLUDES
#
LIB_CURL=-L$(DIR_LIB) -lcurl
#
#MORE LIBS
#
INCLUDES=$(INC_CURL)
LIBS=$(LIB_CURL)
CXX = g++
CXXFLAGS=-g
%.o:%.cpp $(DEPS)
$(CXX) $(CXXFLAGS) -o $@ -c $< $(INCLUDES)
TARGET=main
SRCS=$(wildcard *.cpp)
OBJECTS=$(patsubst %.cpp, %.o, $(SRCS))
$(TARGET):$(OBJECTS)
$(CXX) $(CXXFLAGS) -o $@ $^ $(INCLUDES) $(LIBS)
clean:
rm -f $(TARGET) *.o
现在对上面的这个文件做简单的说明:
1.你可以根据自己的需要添加更多的头文件和库文件,然后组合起来赋给INCLUDES和LIBS,当然LIBS里面的库文件需要注意下顺序,即它们的依赖关系。否则会出现undefined reference to 'XXX'
2.CXXFLAGS中可以根据自己的需要添加编译选项,比如-g(在gdb的时候可以使用),CXX是编译器,可以使用g++,gcc之类的编译器
3.%.o:%.cp $(DEPS) 这里加上$(DEPS)的原因是当头文件被修改的时候,与改头文件相关的文件都将重新被编译。
4.TARGET是你的生成的可执行文件的名称。
5.clean是伪命令。通过make clean来执行清除目标文件的目的。你也可以创建其他的伪命令,比如打包,上传等。
大概就这些了,没什么东西。。。具体的一些语法规则,google一大堆。