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

KE := make
CC   := gcc
CXX  := g++
CXXFLAGS := -std=c++11 -Wall -fPIC
CFLAGS   := -Wall -fPIC
SHARED := -shared
DEFINE_FLAGS := -DNO_ALIGNifeq ($(g), y)CXXFLAGS += -gCFLAGS   += -g
elseCXXFLAGS +=CFLAGS   +=
endififeq ($(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: %.cunvcc $(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调试生成的可执行程序

编写Makefile:编译当前文件夹以及子文件夹下所有的ccpp文件并生成可执行文件相关推荐

  1. 遍历文件夹(含子文件夹)方法

    做法基本上有2大类: ① 经典Dir ② FSO 即 Scripting. File System Object 的[文件系统对象]脚本方法. 一开始可能Dir方法较为普遍,但随着水平的提高,应用FS ...

  2. redhat 复制文件夹及子文件夹_python文件夹怎么操作呢??(建议详读)

    当前工作目录 >>> import os >>> os.getcwd() 我电脑上的结果为: 'C:Users我的电脑AppDataLocalProgramsPyt ...

  3. linux递归赋权限,Linux下递归更改文件夹和子文件夹的权限

    为所有Web应用程序设置适当的文件权限都是Web主机的重要组成部分.在本教程中,您将了解如何在单个命令中递归地更改文件夹和子文件夹上的文件权限. 如您所知,在Linux中,所有内容都被视为一个文件.一 ...

  4. Linux C 读取文件夹下所有文件(包括子文件夹)的文件名

    本文:http://www.cnblogs.com/xudong-bupt/p/3504442.html Linux C  下面读取文件夹要用到结构体struct dirent,在头#include ...

  5. c++利用windows api遍历指定文件夹及其子文件夹中的文件

    以下代码在vs2008中测试通过,利用FindFirstFile,FindNextFile函数遍历了我电脑上全路径为"C:\\Users\\v_tianboli\\Desktop\\wind ...

  6. java ftp遍历所有子文件_Java 遍历指定文件夹及子文件夹下的文件

    Java 遍历指定文件夹及子文件夹下的文件 /** * 遍历指定文件夹及子文件夹下的文件 * * @author testcs_dn * @date2014年12月12日下午2:33:49 * @pa ...

  7. 获取文件夹以及子文件夹里面的所有文件

    1. 没有后缀名的限制: string[] filePaths = Directory.GetFiles(@"c:\MyDir\"); 2. 有后缀名: string[] file ...

  8. java 获取子文件夹_JAVA之File类 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件...

    package ioTest.io3; import java.io.File; /* * 获取一个目录下的所有文件夹和文件,包括子文件夹和子文件 . * 并将文件夹和文件名称打印在控制台上面.并且要 ...

  9. linux 修改文件夹和子文件夹权限,Linux下设置文件夹以及子文件夹中所有文件权限...

    0x00 前言 文章中的文字可能存在语法错误以及标点错误,请谅解: 如果在文章中发现代码错误或其它问题请告知,感谢! 0x01 方法 设置文件夹及子文件夹下所有文件的读.写.可执行权限: [root@ ...

  10. BAT 遍历文件夹和子文件夹下所有文件

    BAT 遍历文件夹和子文件夹下所有文件 参考网址:http://www.cnblogs.com/tangxin-blog/p/5703146.html echo off & color 0A ...

最新文章

  1. 【剑指offer】面试题四:替换空格
  2. 超全机器学习术语词汇表
  3. eclipse让实现类也添加上接口的注释_多线程:面试常问的两种创建方式,数据共享实现和正确停止线程...
  4. 【若依(ruoyi)】工作流操作SQL
  5. BitTorrent协议规范(BitTorrent Protocol Specification)系列之元信息文件结构(Metainfo File Structure)-第二部分...
  6. 自动驾驶与交通效率数学建模_业界大咖:5G智慧交通体系将推动自动驾驶换挡提速 | 推广...
  7. 【报告分享】2021全球职场调研中国报告:期待与忐忑,职场人的心声-普华永道.pdf(附下载链接)...
  8. feign post 传递空值_别再问 GET 和 POST 有什么不同了
  9. AD学习之旅(9)— 新建PCB封装库
  10. cad刷新快捷键_掌握了这些实用的CAD技巧,比别人出图快一小时不止
  11. 如何下载江苏省卫星地图高清版大图
  12. 英文网站建设应该如何做?如何建好一个英文网站?
  13. 【R文本分析】《工作细胞》是一部成功的科普番嘛?
  14. element表格动态合并多列
  15. 300多条MTK工作笔记为你的工作节省一半时间
  16. YouTube营销活动方案
  17. python格式化输出(二)--字符串的格式化输出
  18. C# winform实现百度地图导航
  19. Container Station搭建个人网盘Nextcloud(Mariadb)
  20. Python---python3.7.0---如何安装PIL

热门文章

  1. javaweb+移动端 富文本
  2. ant-select组件页面下滑时下拉框漂浮
  3. 从零搭建移动H5开发项目实战
  4. 半小时学会LevelDB原理及应用
  5. Libev documentation
  6. 【制作ppt的软件】Focusky教程 | 视频全屏播放
  7. iconfont显示小方块
  8. 2020谷歌学术指标出炉,CVPR成AI学术会议总榜第一名
  9. 【人工智能】3.谓词与机器推理
  10. 微型计算机曾经使用过的字长,自考《计算机应用基础》模拟试题七