被广泛引用的博客
具体示例:Linux下gcc与g++用法以及编写makefile_活不明白--技术用时方觉少的技术博客_51CTO博客
详细示例:Makefile经典教程(最掌握这部分足够---因为汇集全部精华)!!!!!!!!!! - 百度文库
常用模板:linux: 几个常用makefile模板_whitepop的博客-CSDN博客_makefile模板
系列:makefile 文件的编写 - kzangv - 博客园
vpath的使用:Makefile VPATH和vpath的使用
makefile的语法:
INC:
(需要的)头文件所在的路径,当需要头文件的时候会到这些目录里面去找
示例:
INC=-I../../include \
-I../../include/log \
-I../../include/otl_mysql \
-I../../include/nl_message_queue \
-I../../include/gtest
LIBS:
(需要的)动态链接库,-l指定链接谁,-L指定到哪里找
示例:
LIBS= -lpthread -lACE -L$(ACE_ROOT)/lib -L../../../bin -L../../lib -L/usr/lib64
CFLAGS
表示用于 C 编译器的选项,
CXXFLAGS
表示用于 C++ 编译器的选项。
使用C++11
(一)生成可执行程序的makefile模板:
阅读博客之后整理
###########################################
#Makefile for simple programs
###########################################
INC=-I../../include \
-I../../include/log \
-I../../include/otl_mysql \
-I../../include/nl_message_queue \
-I../../include/gtest
LIB= -lpthread \
-lACE -L../../lib/ace \
-llog -L../../lib \
-lnl_message_queue -L../../lib \
-lgtest -L../../lib/gtest
CC=g++
CC_FLAG= -fPIC -DOTL_ODBC_UNIX -DOTL_ODBC_MYSQL -DOTL_STL
# -DOTL_ODBC -DOTL_ODBC_UNIX -DOTL_STL
# -DOTL_ODBC_MYSQL
PRG=exe
OBJ= ./test_insert_data_to_db_otl_keep_alive.o
#all target
all:$(PRG)
$(PRG):$(OBJ)
$(CC) -o $@ $(OBJ) $(LIB)
.SUFFIXES: .c .o .cpp
.cpp.o:
$(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
.PRONY:clean
clean:
@echo "Removing linked and compiled files......"
rm -f $(OBJ) $(PRG)
(二)生成动态链接库的makefile模板
#############################################################
# Makefile for shared library.
# 编译动态链接库
#############################################################
#(1)Makefile中的 符号 $@, $^, $< 的意思:
# $@ 表示目标文件
# $^ 表示所有的依赖文件
# $< 表示第一个依赖文件
# $? 表示比目标还要新的依赖文件列表
#
#(2)wildcard、notdir、patsubst的意思:
#
# wildcard : 扩展通配符
# notdir : 去除路径
# patsubst :替换通配符
#包含的头文件
INC= -I./AMQP_include -I./AMQP_include/MessageQueue
#包含的源文件
DIR_SRC = ./AMQP_src
#生成的中间文件
DIR_OBJ =
#生成的目标文件
DIR_BIN = ./lib
#使用C编译器
#CC = gcc
#使用C++编译器
CC = g++
#-fPIC 编译成位置无关的动态库,编译成动态库时必选
#-g 表示调试模式
#-Wall 表示打印所有警告
CC_FLAG = -fPIC -g -Wall -I${INC} -D__linux
#需要的动态链接库
LIB = ./libcentos/librabbitmq.so.4.2.0
#生成的动态链接库,位置及文件名
PRG = ./libcentos/libmq.so
SRC = ./AMQP_src
#需要的源文件
OBJ = $(SRC)/RabbitMQ_Adapter.o $(SRC)/RabbitMQ.o
#all target
all:$(PRG)
$(PRG):$(OBJ)
$(CC) -shared -o $@ $(OBJ) $(LIB)
.SUFFIXES: .c .o .cpp
.cpp.o:
$(CC) $(CC_FLAG) $(INC) -c $*.cpp -o $*.o
#PRONY表示伪目标文件
.PRONY:clean
clean:
@echo "Removing linked and compiled files......"
#清楚生成的中间文件和可执行文件或动态链接库
-rm -f $(OBJ) $(PRG)