makefile模板

@Linux
首先改代码,用到MFC的地方直接加宏跳过去先,然后一一配比文件名,注意文件名大小写,尤其是stdafx.h这个文件
然后写makefile,把我自己写的模板提交上来,大佬们走过路过看一看指点指点
第一个是生成库文件的



库文件make模板(以mindy为例)

#mindy makefile

#define mindy develop env; eg: include dir, output dir,
link dir;

 

#指定sdk头文件路径,仅仅定义了宏

#后续建议吧内部路径修正到环境变量

include $(MAPGIS_DEV_SDK)/make.opt

#指定包含第三方库头文件的路径,仅仅定义了宏

MAPGIS_3RD_GDAL_INC := $(MAPGIS_3RD)/gdal/include

MAPGIS_3RD_JSONC_INC := $(MAPGIS_3RD)/json-c/include

………

#获取当前shell路径

CurDir := $(shell pwd)

#指定当前工程下有哪些工程子目录,注意区分大小写

SubDir :=

#指定编译结果目录

LIBPATH:= /home/mindy/bin

#指定编译结果路径

EXECUTABLE := $(LIBPATH)/demo.so

#指定依赖的动态库,假设依赖libbasmath70.so,只需要填写basmath70

LIBS := winapi winafx basmath70 baseproject json-c z

#指定编译器为gcc

CC:= gcc

LDFLAGS:= -Wl,-Bsymbolic -z now

#指定调试信息

MAPGIS_DEBUG := -g

#具体参与编译的编译选项CFLAGS、CXXFLAGS

#头文件包含

CFLAGS:=-I$(WIN_INC)    -I$(MAPGIS_INC)      -I$(MAPGIS_IN_INC)         -I$(WIN_INC_WIN32)          -I$(WIN_INC_MSVCR)         -I$(MAPGIS_3RD_GDAL_INC)    -I$(MAPGIS_3RD_JSONC_INC)
       -I$(MAPGIS_3RD_BOOST) -I$(CurDir)

CFLAGS +=-fPIC $(MAPGIS_DEBUG) -DMAPGIS_LINUX
-DMAPGIS_X64 -DSQLITE3

#添加关键字-fsigned-char、-std=c++11

#
-funsigned-char  

#-fno-signed-char  

#-fsigned-char  

#-fno-unsigned-char  

#这四个参数是对char类型进行配置,决定将char类型配置成unsigned
char(前两个参数)或 signed char(后两个参数)

CFLAGS += -fsigned-char

#给定C++版本

CXXFLAGS := $(CFLAGS) -std=c++11

#自定义系统常用变量

RM-F := rm -f

RM := rm

#循环查询所有的.c和.cpp文件

SOURCE := $(wildcard *.c) $(wildcard *.cpp) $(foreach
n, $(SubDir), $(wildcard $(CurDir)/$(n)/*.cpp)) $(foreach n, $(SubDir),
$(wildcard $(CurDir)/$(n)/*.c))

#错过的source文件变量

MISSING_SOURCE :=

#对source进行筛选

SOURCE := $(filter-out $(MISSING_SOURCE),$(SOURCE))

#根据.c和.cpp文件的文件名查询对应的.o文件

OBJS := $(patsubst %.c,%.o,$(patsubst
%.cpp,%.o,$(SOURCE)))

#根据.o文件的文件名查询对应的.d文件

DEPS := $(patsubst %.o,%.d,$(OBJS))

#查询未匹配的.d文件

MISSING_DEPS := $(filter-out $(wildcard $(DEPS)),$(DEPS))


#未匹配到的.d文件生成对应的.cpp文件

MISSING_DEPS_SOURCES:=$(wildcard$(patsubst%.d,%.cpp,$(MISSING_DEPS))
$(patsubst %.d,%.cpp,$(MISSING_DEPS)))

CPPFLAGS += -MD

 

..PHONY : build deps objs clean allclean rebuild

build: $(EXECUTABLE)

deps : $(DEPS)

objs : $(OBJS)

test :

         echo
$(SOURCE)

demo.o :

         gcc
$(CFLAGS) -MD -c -o $(CurDir)/demo.o $(CurDir)/demo.c

clean :

         $(foreach
n, $(OBJS), $(shell $(RM) $(n)))

         $(foreach
n, $(DEPS), $(shell $(RM) $(n)))

allclean: clean

         $(RM-F)
$(EXECUTABLE)

rebuild: allclean build

prepare:

header:

         #cp
basClass70.h $(MAPGIS_INC)

ifneq ($(MISSING_DEPS),)

$(MISSING_DEPS):

         $(RM-F)
$(patsubst %.d,%.o,$@)

endif

-include $(DEPS)

#具体生成动态库编译指令

$(EXECUTABLE) : demo.o $(OBJS)

         $(CC) -o
$(EXECUTABLE) -fPIC -shared $(OBJS) -L$(LIBPATH) $(addprefix -l,$(LIBS))
$(LDFLAGS)

         ld
$(EXECUTABLE) -rpath $(LIBPATH)

woc,CDSN这个功能我喜欢
下面这个是生成可执行文件的



可执行文件make模板(以mindy为例)

#mindy  makefile

#define mindy develop env; eg: include dir, output dir,
link dir;

#当前shell命令执行目录

CurDir := $(shell pwd)

#空变量,建议填写为工程子目录为文件夹名称

SubDir := 

#生成的可执行文件所属目录

LIBPATH :=/home/mindy/bin/x64

#生成的可执行文件(main.out)路径

EXECUTABLE := $(LIBPATH)/main.out

#程序依赖的库名

LIBS := 

#编译器

CC:= gcc

LDFLAGS:= -Wl,-Bsymbolic -z now

#MAPGIS_DEBUG指令变量

MAPGIS_DEBUG := -g

#包含文件变量

CFLAGS := -I$(CurDir)

CFLAGS += $(MAPGIS_DEBUG)

CXXFLAGS := $(CFLAGS) 

#自定义系统变量

RM-F := rm -f 

RM := rm

#循环查询所有的.c和.cpp文件

SOURCE := $(wildcard *.c) $(wildcard *.cpp) $(foreach
n, $(SubDir), $(wildcard $(CurDir)/$(n)/*.cpp)) $(foreach n, $(SubDir),
$(wildcard $(CurDir)/$(n)/*.c))

#指定的不编译的文件

MISSING_SOURCE := 

#筛选之后剩余的.cpp和.c文件

SOURCE := $(filter-out $(MISSING_SOURCE),$(SOURCE))

#根据.c和.cpp文件的文件名查询对应的.o文件

OBJS := $(patsubst %.c,%.o,$(patsubst
%.cpp,%.o,$(SOURCE)))

#根据.o文件的文件名查询对应的.d文件

DEPS := $(patsubst %.o,%.d,$(OBJS)) 

#查询未匹配的.d文件

MISSING_DEPS := $(filter-out $(wildcard
$(DEPS)),$(DEPS)) 

#未匹配到的.d文件生成对应的.cpp文件

MISSING_DEPS_SOURCES:=$(wildcard$(patsubst     %.d,%.cpp,$(MISSING_DEPS)) $(patsubst
%.d,%.cpp,$(MISSING_DEPS))) 

#创建makefile需要变量

CPPFLAGS += -MD

#整合

..PHONY : build 
deps objs clean allclean rebuild 

#build路径

build: $(EXECUTABLE) 

#deps路径

deps : $(DEPS)

#objs路径 

objs : $(OBJS)

#SOURCE路径输出

test :

         echo
$(SOURCE)

#进行必要的删除

clean :  

         $(foreach
n, $(OBJS), $(shell $(RM) $(n)))

         $(foreach
n, $(DEPS), $(shell $(RM) $(n)))

allclean: clean 

         $(RM-F)
$(EXECUTABLE)

rebuild: allclean build

header:

#对MISSING_DEPS内容进行判断

ifneq ($(MISSING_DEPS),) 

$(MISSING_DEPS): 

         $(RM-F)
$(patsubst %.d,%.o,$@) 

endif 

-include $(DEPS) 

#最终的编译链接指令

$(EXECUTABLE) : $(OBJS) 

         $(CC) -o
$(EXECUTABLE)  $(OBJS)  -L$(LIBPATH) $(addprefix -l,$(LIBS))
$(LDFLAGS)
		

以上
后续更新在编译过程中遇到的问题,做下记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值