编写Makefile:编译当前文件夹以及子文件夹下所有的c&&cpp文件并生成可执行文件

makevar: (预定义一些变量,包括编译器,g++/gcc编译的参数,全局宏定义等,该文件会包含在Makefle中)

KE := make
CC   := gcc
CXX  := g++
CXXFLAGS := -std=c++11 -Wall -fPIC
CFLAGS   := -Wall -fPIC
SHARED := -shared
DEFINE_FLAGS := -DNO_ALIGN

ifeq ($(g), y)
        CXXFLAGS += -g
        CFLAGS   += -g
else
        CXXFLAGS +=
        CFLAGS   +=
endif

ifeq ($(d), y)
        DEFINE_FLAGS += -D_XML_DESC_PATH_CHANGE -DCLOUD_PLATFORM -DSIFTGPU_NO_DEVIL -DCUDA_SIFTGPU_ENABLED -DCUDA_ENABLED
endif

Makefile: 

########################################################

#当前目录
CurDir=$(shell pwd)
#代码库根目录
RootDir=$(CurDir)
include ${RootDir}/makevar
LIB3RD_DIR=$(CurDir)/./lib_static
########################################################

#头文件目录
INCLUDE := -I${LIB3RD_DIR}/boost_1_72_0/include  -I${LIB3RD_DIR}/FreeImage-3.18.0/include  -I${LIB3RD_DIR}/glew-2.1.0/include  -I./src -I./lib -I/usr/local/cuda-10.0/targets/x86_64-linux/include -I/usr/include/mysql

#依赖库目录
TDLIBS := -L/usr/local/lib -lboost_program_options -lboost_filesystem -lgflags -L/usr/local/lib64 -lceres -lglog -L/usr/lib -lfreeimage -L/lib64 -lGLU -L/usr/lib64 -lpthread -lGL -ldl -lGLEW -L/usr/local/cuda-10.0/targets/x86_64-linux/lib/stubs -lcuda -L/usr/local/cuda-10.0/targets/x86_64-linux/lib -lcudart -L/opt/data/vlfeat-0.9.21/bin/glnxa64 -lvl -L/usr/lib/x86_64-linux-gnu -lOpenGL -L./lib/SiftGPU -lProgramCU -lmysqlclient
LIBRARY :=

#过滤的文件,指定哪些源文件不需要编译
FilterFiles_CPP :=
FilterFiles_C := getopt.c
FilterFiles := $(FilterFiles_C) $(FilterFiles_CPP)
FilterFiles := $(addprefix %/,$(FilterFiles))

SOURCES_ALL := $(shell find . -name "*.cpp" -o -name "*.c" -o  -name "*.cu")
SOURCES := $(filter-out $(FilterFiles), $(SOURCES_ALL))

SOURCES_CU   := $(filter %.cu, $(SOURCES))
SOURCES_C   := $(filter %.c, $(SOURCES))
SOURCES_CPP := $(filter %.cpp, $(SOURCES))

OBJECTS_CU   := $(addsuffix .o, $(basename $(SOURCES_CU)))
OBJECTS_C   := $(addsuffix .o, $(basename $(SOURCES_C)))
OBJECTS_CPP := $(addsuffix .o, $(basename $(SOURCES_CPP)))

OBJECTS :=$(OBJECTS_CU) $(OBJECTS_C) $(OBJECTS_CPP)
#OBJECTS := $(SOURCES:.cpp=.o)
#DEPS := $(SOURCES:.cpp=.d)

MAIN := main
#######################################################


#test:
#	@echo $(SOURCES)
#	@echo $(OBJECTS)

all:$(MAIN)
%.d: %.cu
	@set -e; rm -f $@;
	nvcc $(INCLUDE) -MM $< | sed -e 's,.*\.o[ :]*,$*.o : ,g' > $@;

%.d: %.c
	@set -e; rm -f $@;
	$(CC) $(INCLUDE) -MM $< | sed -e 's,.*\.o[ :]*,$*.o : ,g' > $@;

%.d: %.cpp
	@set -e; rm -f $@;
	$(CXX) $(INCLUDE) -MM $< | sed -e 's,.*\.o[ :]*,$*.o : ,g' > $@;

#sinclude $(SOURCES:.cpp=.d)

%.o: %.c
	$(CC) $(CFLAGS) $(INCLUDE) -c $< -o $@
%.o: %.cu
	nvcc $(INCLUDE) -c $< -o $@
%.o:%.cpp
	$(CXX) $(CXXFLAGS) $(DEFINE_FLAGS) $(INCLUDE) -c $< -o $@


$(MAIN):$(OBJECTS)
	$(CXX) $(CXXFLAGS) $(OBJECTS) $(TDLIBS) $(LIBRARY) -o $@


.PHONY: clean
clean:
	@echo "clean project start"
	rm -rf $(MAIN) $(OBJECTS)
	find . -name "*.d" | xargs rm -rf
	@echo "clean project finished"


########################################################


执行命令:

make:直接编译

make d=y:会加入预定义宏

make g=y:会生成调试信息,可用gdb调试生成的可执行程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值