一个自动化 编译当前目录所有cpp为可执行文件的makefie
2010-08-17 13:37
603 查看
# author:
// 提取路径xxxxx之前的路径
// eg /home/nemo/xxxxxxx, 则 trunk_path=/home/nemo
trunk_path = $(shell pwd | sed "s///xxxxxx.*//")
// 包含另一个makefile,里面定义了很多公共库的LIB_路径和INC路径
include $(trunk_path)/makeinclude/make_macro.platform
// 我们使用的库,通过USED生成上面的包含文件定义的变量
USED = /
QK /
MYSQL
C_FLAGS += -Werror -MMD -shared
INC = $(foreach i, $(USED), $(INC_$(i))) -I../comm
LIB = $(foreach i, $(USED), $(LIB_$(i)))
#PATH_CGI = $(trunk_path)/release/platform/cgi-bin/msg
#目标cgi的路径,未来的执行目录,后面会有规则把cgi拷贝过去
PATH_CGI = /data/release/platform/cgi-bin/msg
#展开当前目录的.cpp文件列表 改文件如果被其他makefile包含,也就是展开
#最终make使用的makefile所在的目录的文件
SOURCES = $(wildcard *.cpp)
#将souces列表里面的每一个cpp 转化为$(PATH_CGI)/% eg
# a.cpp =>$(PATH_CGI)/%=>$(trunk_path)/release/platform/cgi-bin/msg/a
# 目的是为了通过后面的规则,把.a 文件拷贝到$(PATH_CGI)目录,并命名为a
DISTS = $(patsubst %.cpp, $(PATH_CGI)/%, $(SOURCES))
#生成隐藏目标文件 a.cpp => .a
TARGETS = $(patsubst %.cpp, .%, $(SOURCES))
#同理 a.cpp=>.a.d
DEPENDS = $(patsubst %.cpp, .%.d, $(SOURCES))
.DELETE_ON_ERROR: $(DEPENDS)
.PHONY: all clean
# check 是用来执行 高位函数检查的,如果代码中使用饿了高危函数,则直接make失败
# $(PATH_CGI) 用来检查目录是否存在,不存在则创建目录
# $(TARGETS) 包含了所有的最终文件 不过都是 。开头 eg hello.cpp .hello
all: check $(PATH_CGI) $(TARGETS) $(DISTS)
#同名替换 .a : a.cpp
#相当于生成目标文件 .a 其中用到了自动生成 依赖关系的命令 -MF $@.d
# $@.d <=> .a.d
# -MF $@.d 该命令省掉了所有的 a.o : a.cpp ***.h ***.h的编写!
.%: %.cpp
$(CXX) -o $@ -MF $@.d $(C_FLAGS) $< $(INC) $(LIB)
@echo
#对(PATH_CGI)下面的每一个文件 将.a文件copy过去
#md5sum是计算一下目标文件的 md5值,在屏幕上输出。前面的@表示 改行命令本身不输出
$(PATH_CGI)/%: .%
@cp -f $< $@
@md5sum $@
clean:
@rm -f $(DEPENDS) $(TARGETS) $(PATH_CGI)/msg*
check:
$(trunk_path)/makeinclude/make_check
# 如果该目录不存在,则创建该目录
$(PATH_CGI):
@mkdir -p $@
#DEPENDS是一系列 .cpp 的头文件依赖关系文件 eg .a.d, .hello.d, .....
#当第一次执行 make的时候 生成。
-include $(DEPENDS)
// 提取路径xxxxx之前的路径
// eg /home/nemo/xxxxxxx, 则 trunk_path=/home/nemo
trunk_path = $(shell pwd | sed "s///xxxxxx.*//")
// 包含另一个makefile,里面定义了很多公共库的LIB_路径和INC路径
include $(trunk_path)/makeinclude/make_macro.platform
// 我们使用的库,通过USED生成上面的包含文件定义的变量
USED = /
QK /
MYSQL
C_FLAGS += -Werror -MMD -shared
INC = $(foreach i, $(USED), $(INC_$(i))) -I../comm
LIB = $(foreach i, $(USED), $(LIB_$(i)))
#PATH_CGI = $(trunk_path)/release/platform/cgi-bin/msg
#目标cgi的路径,未来的执行目录,后面会有规则把cgi拷贝过去
PATH_CGI = /data/release/platform/cgi-bin/msg
#展开当前目录的.cpp文件列表 改文件如果被其他makefile包含,也就是展开
#最终make使用的makefile所在的目录的文件
SOURCES = $(wildcard *.cpp)
#将souces列表里面的每一个cpp 转化为$(PATH_CGI)/% eg
# a.cpp =>$(PATH_CGI)/%=>$(trunk_path)/release/platform/cgi-bin/msg/a
# 目的是为了通过后面的规则,把.a 文件拷贝到$(PATH_CGI)目录,并命名为a
DISTS = $(patsubst %.cpp, $(PATH_CGI)/%, $(SOURCES))
#生成隐藏目标文件 a.cpp => .a
TARGETS = $(patsubst %.cpp, .%, $(SOURCES))
#同理 a.cpp=>.a.d
DEPENDS = $(patsubst %.cpp, .%.d, $(SOURCES))
.DELETE_ON_ERROR: $(DEPENDS)
.PHONY: all clean
# check 是用来执行 高位函数检查的,如果代码中使用饿了高危函数,则直接make失败
# $(PATH_CGI) 用来检查目录是否存在,不存在则创建目录
# $(TARGETS) 包含了所有的最终文件 不过都是 。开头 eg hello.cpp .hello
all: check $(PATH_CGI) $(TARGETS) $(DISTS)
#同名替换 .a : a.cpp
#相当于生成目标文件 .a 其中用到了自动生成 依赖关系的命令 -MF $@.d
# $@.d <=> .a.d
# -MF $@.d 该命令省掉了所有的 a.o : a.cpp ***.h ***.h的编写!
.%: %.cpp
$(CXX) -o $@ -MF $@.d $(C_FLAGS) $< $(INC) $(LIB)
@echo
#对(PATH_CGI)下面的每一个文件 将.a文件copy过去
#md5sum是计算一下目标文件的 md5值,在屏幕上输出。前面的@表示 改行命令本身不输出
$(PATH_CGI)/%: .%
@cp -f $< $@
@md5sum $@
clean:
@rm -f $(DEPENDS) $(TARGETS) $(PATH_CGI)/msg*
check:
$(trunk_path)/makeinclude/make_check
# 如果该目录不存在,则创建该目录
$(PATH_CGI):
@mkdir -p $@
#DEPENDS是一系列 .cpp 的头文件依赖关系文件 eg .a.d, .hello.d, .....
#当第一次执行 make的时候 生成。
-include $(DEPENDS)
相关文章推荐
- linux/mac下将一个文件夹中所有文件从当前目录移动到另一目录下
- C#执行一个目录下所有sql文件
- DOS:求一个能取当前执行的bat文件所在目录方法。
- 多文件目录下makefile文件递归执行编译所有c文件
- 删除一个目录下面的所有可执行文件
- 多文件目录下makefile文件递归执行编译所有c文件
- 多文件目录下makefile文件递归执行编译所有c文件
- makefile 自动编译同一个目录下的所有文件
- 写一个脚本,把当前目录下除目录以外的所有普通文件
- 一个编译可执行jar包 jar包中不包含resources下config.properties且可以读到config.properties文件且classpath中有当前路径的pom
- 编写一个程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径。
- 多文件目录下makefile文件递归执行编译所有c文件
- 多文件目录下makefile文件递归执行编译所有c文件(小例子1)
- 编写一个Python程序,能在当前目录以及当前目录的所有子目录下查找文件名包含指定字符串的文件,并打印出相对路径
- Javac命令一次编译一个目录下的所有java文件
- mac 查找当前目录下所有同一类型文件,并执行命令行
- 【转】多文件目录下makefile文件递归执行编译所有c文件
- linux下设计一个Shell脚本:判断当前工作目录下所有的文件类型。
- makefile 自动编译同一个目录下的所有文件
- 一个简单的makefile的实现,编译当前目录下所有的.c文件