linux环境下 Makfile 文件的编写 :
1.环境变量的定义
a.单独定义环境变量的文件env.sh
b . env.sh的内容:
export PROJECT_PATH ="/home/user/project/sources"
echo "PROJECT_PATH ="$PROJECT_PATH
export LIB_PATH = ~/lib : ~/usr/bin: $(PROJECT_PATH)/lib
echo " LIB_PATH=" $LIB_PATH
c.运行 (env.sh所在的路径下)
source env.sh
d.查看环境变量
env
2.基本编译变量的定义
a.定义文件 basetool.mk
b. basetool.mak的内容:
CC := gcc -g
CPP := g++
LD := ld
RM := rm -f
CP := cp
MV := mv
MAKE:= make
3.makefile文件的定义
a.在sources路径下定义makefile文件
b.makefile的内容:
include $(PROJECT_PATH)/tool/basetool.mk
BUILD_TYPE := exectable
LOCAL_INC := -l $(PROJECT_PATH)/source/inc //目标代码的路径
LOCAL_LIB := media_all media_base media_object media_type //本地的动态库
LIB_MODDULE:= libmedia_all.so //目标动态库
BIN_MODULE := media_daemon //执行目标
INCLUDE := -I $(PROJECT_PATH)/source/inc \
-I $(PROJECT_PATH)/source/src //头文件的路径
LIB_OBJECT := media_gdbus.o media_proxy_folder.o //动态库所需的目标文件
BIN_OBJECT := media_daemon.o media_folder.o //执行目标所需的目标文件
LDFLAGS:= -L $(PROJECT_PATH)/lib -L $(PROJECT_PATH)/common/lib -L $(PROJECT_PATH)/usr/lib -rdymamic //本地动态库的路径
//首先执行此处,然后根据依赖关系,一步步向下执行,从底层比较已编译的文件与现在将要编译文件的变更,如果现在文件较新,编译此文件,然后一步步向上执行,否则跳过执行下一个文件。
all: MediaExe
@echo $(PWD) "-make MediaExe all ......"
@echo $(BIN_MODULE)
//生成可执行文件
MediaExe: MediaLib $(BIN_OBJECT)
$(CC) $(INCLUDE) -wall -o $(BIN_MODULE) $(BIN_OBJECT) -L $(PROJECT_PATH)/lib -L $(PROJECT_PATH)/common/lib $(addprefix -l,$(LOCAL_LIB))
$(CP) $(BIN_MODULE) $(PROJECT_PATH)/bin
//生成目标动态库
MediaLib : $(LIB_OBJECT)
$echo $(PWD) "-make MediaLib..... "
$(CC) -shared -o $(LIB_MODDULE) $( LIB_OBJECT) $(LDFLAGS) -ltarget_base -ltaget_object -lmedia_type
$(CP) $(BIN_MODULE) $(PROJECT_PATH)/lib
// 生成对象文件
media_gdbus.o :
@echo $(PWD) "-make media_gdbus.o ......"
@(CC) $(INCLUDE) -wall -o media_gdbus.c
media_proxy_folder.o: media_proxy_folder.o
@echo $(PWD) "-make media_proxy_folder ......"
@(CC) $(INCLUDE) -wall -o media_proxy_folder.c
media_folder.o: media_gdbus.o
@echo $(PWD) "-make media_folder ......"
@(CC) $(INCLUDE) -wall -o media_folder.c
media_daemon.o: media_folder.o
@echo $(PWD) "-make media_daemon ......"
@(CC) $(INCLUDE) -wall -o media_daemon.c
//清除所有的对象文件、动态库以及可执行目标
.PHONE: clean
clean :
@echo “-make clean Exe”
@-$(RM) *.o
@-$(RM) *.bak
@-$(RM) $(LIB_MODDULE)
1.环境变量的定义
a.单独定义环境变量的文件env.sh
b . env.sh的内容:
export PROJECT_PATH ="/home/user/project/sources"
echo "PROJECT_PATH ="$PROJECT_PATH
export LIB_PATH = ~/lib : ~/usr/bin: $(PROJECT_PATH)/lib
echo " LIB_PATH=" $LIB_PATH
c.运行 (env.sh所在的路径下)
source env.sh
d.查看环境变量
env
2.基本编译变量的定义
a.定义文件 basetool.mk
b. basetool.mak的内容:
CC := gcc -g
CPP := g++
LD := ld
RM := rm -f
CP := cp
MV := mv
MAKE:= make
3.makefile文件的定义
a.在sources路径下定义makefile文件
b.makefile的内容:
include $(PROJECT_PATH)/tool/basetool.mk
BUILD_TYPE := exectable
LOCAL_INC := -l $(PROJECT_PATH)/source/inc //目标代码的路径
LOCAL_LIB := media_all media_base media_object media_type //本地的动态库
LIB_MODDULE:= libmedia_all.so //目标动态库
BIN_MODULE := media_daemon //执行目标
INCLUDE := -I $(PROJECT_PATH)/source/inc \
-I $(PROJECT_PATH)/source/src //头文件的路径
LIB_OBJECT := media_gdbus.o media_proxy_folder.o //动态库所需的目标文件
BIN_OBJECT := media_daemon.o media_folder.o //执行目标所需的目标文件
LDFLAGS:= -L $(PROJECT_PATH)/lib -L $(PROJECT_PATH)/common/lib -L $(PROJECT_PATH)/usr/lib -rdymamic //本地动态库的路径
//首先执行此处,然后根据依赖关系,一步步向下执行,从底层比较已编译的文件与现在将要编译文件的变更,如果现在文件较新,编译此文件,然后一步步向上执行,否则跳过执行下一个文件。
all: MediaExe
@echo $(PWD) "-make MediaExe all ......"
@echo $(BIN_MODULE)
//生成可执行文件
MediaExe: MediaLib $(BIN_OBJECT)
$(CC) $(INCLUDE) -wall -o $(BIN_MODULE) $(BIN_OBJECT) -L $(PROJECT_PATH)/lib -L $(PROJECT_PATH)/common/lib $(addprefix -l,$(LOCAL_LIB))
$(CP) $(BIN_MODULE) $(PROJECT_PATH)/bin
//生成目标动态库
MediaLib : $(LIB_OBJECT)
$echo $(PWD) "-make MediaLib..... "
$(CC) -shared -o $(LIB_MODDULE) $( LIB_OBJECT) $(LDFLAGS) -ltarget_base -ltaget_object -lmedia_type
$(CP) $(BIN_MODULE) $(PROJECT_PATH)/lib
// 生成对象文件
media_gdbus.o :
@echo $(PWD) "-make media_gdbus.o ......"
@(CC) $(INCLUDE) -wall -o media_gdbus.c
media_proxy_folder.o: media_proxy_folder.o
@echo $(PWD) "-make media_proxy_folder ......"
@(CC) $(INCLUDE) -wall -o media_proxy_folder.c
media_folder.o: media_gdbus.o
@echo $(PWD) "-make media_folder ......"
@(CC) $(INCLUDE) -wall -o media_folder.c
media_daemon.o: media_folder.o
@echo $(PWD) "-make media_daemon ......"
@(CC) $(INCLUDE) -wall -o media_daemon.c
//清除所有的对象文件、动态库以及可执行目标
.PHONE: clean
clean :
@echo “-make clean Exe”
@-$(RM) *.o
@-$(RM) *.bak
@-$(RM) $(LIB_MODDULE)
@-$(RM) $(BIN_MODULE)
3.运行
在makefile文件的路径下,执行如下指令:
make