编写自己的Makefile
来源:互联网 发布:ios必备app知乎 编辑:程序博客网 时间:2024/05/21 17:10
之前学习了一些Makefile规则,自己编写了一个简单的Makefile,分为三个部分:HYCMakefile,Makefilebase.mk,Makefile
Makefilebase.mk是一些通用规则,就像c++代码中的头文件,我们把一些通用的规则,放在一起;
HYCMakefile,是一些需要使用Makefile时,才能确定的一些内容,比如用到哪些include目录,库文件目录,用到哪些宏定义、哪些源文件 等等;
Makefile的内容如下:
#############################################################################
# author:huangxw
# hyc
#############################################################################
#
PROJ_TYPE = HYC
#
include $(HYC_BASE)/etc/Makefilebase.mk #####这个就是把基本规则引入
#
DEST=test
#BIN,APP
DEST_TYPE = BIN
#
USER_DEFS= TEST_LOG
DEST_SOURCES:= $(shell find ./ -maxdepth 1 -name \*.cpp)
#
USER_INC_PATH =$(HYC_BASE)/include/unix #####头文件路径
#
USER_LIBRARIES = #####包含哪些库
#
# 包含基本的 Makefile 规则文件
include $(HYC_BASE)/etc/HYCMakefile #####这个根据引入第二部分,这里面调用了g++等
【说明】这里的include可以理解为c++代码中的宏定义,直接把文件内容替换
Makefilebase.mk源码:
#####################################################################
#
# author:huangxw
# hyc
#####################################################################
#
#
OS_TYPE := $(shell uname)
#
#
ifeq "$(OS_TYPE)" "Linux"
endif
#################################################################################
#public
CC=g++
CFLAGS := -Wall -g -fPIC
#
ifeq ($(DEST_TYPE),APP)
CFLAGS += -shared
endif
#
ifeq "$(PROJ_TYPE)" "PROJ_TEST"
INCLUDE_PATH := $(HOME)/work/project/include
INSTALL_HEADER_PATH := $(HOME)/work/project/include
LIB_PATH := /home/huangxw/ob_rel/lib
INSTALL_LIB_PATH := /home/huangxw/ob_rel/lib
endif
#
ifeq "$(PROJ_TYPE)" "HYC"
INCLUDE_PATH := ./ $(HYC_BASE)/include
INSTALL_HEADER_PATH := $(HYC_BASE)/include
LIB_PATH := ./ $(HYC_BASE)/lib
INSTALL_LIB_PATH := $(HYC_BASE)/lib
OB_REL := $(HYC_BASE)/etc
endif
#################################################################################
Source2Object = $(foreach i,$(basename $(notdir $(1))),build/$(i).o)
##################################################################################
HYCMakefile源码:
#############################################################################
# author:huangxw
# hyc
#############################################################################
#
TARGET=$(DEST)
#
ifeq ($(DEST_TYPE),APP)
TARGET=lib$(DEST).so
endif
#
ifneq "$(USER_DEFS)" ""
H_USER_DEFS := $(foreach n,$(USER_DEFS),-D$(n))
endif
#
H_LIB_PATH:=
ifneq "$(LIB_PATH)" ""
H_LIB_PATH := $(foreach n,$(LIB_PATH),-L$(n))
endif
#
H_INCLUDE_PATH:=
ifneq "$(USER_INC_PATH)" ""
INCLUDE_PATH += $(USER_INC_PATH)
endif
H_INCLUDE_PATH := $(patsubst %, -I%, $(INCLUDE_PATH))
#
H_USER_LIBRARIES:=
ifneq "$(USER_LIBRARIES)" ""
H_USER_LIBRARIES := $(patsubst %,-l% , $(USER_LIBRARIES))
endif
###########################################################################
OBJS := $(DEST_SOURCES:.cpp=.o)
PATHOBJS := $(call Source2Object,$(DEST_SOURCES))
all:echo dir $(OBJS) $(TARGET) exec
echo:
@echo $(OBJS)
dir:
mkdir -p build
$(OBJS):%.o:%.cpp
$(CC) $(CFLAGS) $(H_USER_DEFS) $(H_INCLUDE_PATH) $(H_LIB_PATH) $(H_USER_LIBRARIES) -c $< -o ./build/$(notdir $@)
$(TARGET):$(PATHOBJS)
$(CC) $(CFLAGS) $(H_USER_DEFS) $(H_INCLUDE_PATH) $(H_LIB_PATH) $(H_USER_LIBRARIES) $? -o build/$@
exec:
@cp ./build/$(TARGET) .
###############################################
clean:
rm -rf build $(TARGET)
各位兄弟姐妹,如果你看到了这里,并觉得有些帮助,请顶一个,谢谢!
- 编写自己的Makefile
- 编写自己的makefile文件
- Clion 使用自己编写的 Makefile编译
- 工程中编写自己的makefile---6 makefile学习
- 如何自己编写Makefile
- 如何自己编写Makefile
- 如何自己编写Makefile
- 如何自己编写Makefile
- 如何自己编写Makefile
- 如何自己编写Makefile
- 如何自己编写Makefile
- 自己如何编写makefile
- 如何自己编写Makefile
- 如何自己编写Makefile
- 如何自己编写Makefile
- 如何自己编写makefile
- 如何自己编写Makefile
- 如何自己编写Makefile
- 用google mock模拟C++对象
- 统计网络流量
- 屏幕上显示多个alv.
- Css-纯CSS注释层
- 五个最佳编程文本编辑器
- 编写自己的Makefile
- Weka使用笔记之一
- C# 文件和字节流的转换
- 获取iphone模拟器程序中的plist文件
- Ajax与JSON的一些总结
- POJ-1276Cash Machine
- 二维DCT变换
- Eclipse不能识别android设备
- linux 清空文件内容命令