一个通用的Makefile(自动遍历文件、C和C++混合)_makefile 遍历所有c-程序员宅基地

技术标签: C/C++  c++  Linux  c语言  makefile  


这是一个通用的Makefile

支持

1.自动遍历源文件

  自动遍历源文件文件部分参考 https://blog.csdn.net/yuliying/article/details/49635485

AllDIRS := $(shell ls -R | grep '^\./.*:$$' | awk '{gsub(":","");print}') .
CSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.c)) 
CXXSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.cpp)) 

  暂时无法遍历头文件,使用时如头文件不在当前路径,需添加头文件路径,如:

INC_PATH = -I $(SRC_PATH) \
				-I $(SRC_PATH)/inc\

2.C和C++文件混合使用

  C和CPP文件分开编译,使用g++链接

%.o : %.cpp

	$(CXX) $(DEBUG_FLAG) $< -c -o $@ $(INC_PATH) $(LIB_PATH);

%.o : %.c

	$(CC) $(DEBUG_FLAG) $< -c -o  $@ $(INC_PATH) $(LIB_PATH);

$(TARGET) : $(OBJS)

	$(CXX) $(DEBUG_FLAG) $^ -o $@ $(INC_PATH) $(LIB_PATH);

	@echo "> build success <"	

3.链接库

  如需链接库(如线程-lpthread)则将选项加在LIB_PATH = 后

LIB_PATH = -lpthread

4.其他编译选择

  如需添加其他编译选项(如-g支持GDB调试)则将选项加在DEBUG_FLAG :=后

DEBUG_FLAG := -g

完整Makefile:

TARGET = exe

CC = gcc

CXX = g++


AllDIRS := $(shell ls -R | grep '^\./.*:$$' | awk '{gsub(":","");print}') .

CSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.c)) 

CXXSRCS = $(foreach n,$(AllDIRS) , $(wildcard $(n)/*.cpp)) 

OBJS := $(CSRCS:.c=.o) $(CXXSRCS:.cpp=.o)

SRC_PATH = .


INC_PATH = -I $(SRC_PATH) \
				-I $(SRC_PATH)/inc\


LIB_PATH = -lpthread

DEBUG_FLAG  =

#DEBUG_FLAG := -g				


%.o : %.cpp

	$(CXX) $(DEBUG_FLAG) $< -c -o $@ $(INC_PATH) $(LIB_PATH);

%.o : %.c

	$(CC) $(DEBUG_FLAG) $< -c -o  $@ $(INC_PATH) $(LIB_PATH);


$(TARGET) : $(OBJS)

	$(CXX) $(DEBUG_FLAG) $^ -o $@ $(INC_PATH) $(LIB_PATH);

	@echo "> build success <"


.PHONY:clean


clean:

	rm -f $(OBJS) $(TARGET)



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/c1724136570/article/details/119413200

智能推荐

HighTec自带UDE使用(二)_ude工具如何排查death-程序员宅基地

文章浏览阅读2.2k次,点赞2次,收藏6次。本次再来介绍两个小技巧。1、所需全局变量的调用,在Watches窗口添加变量的一栏右击,会出现一些选项,选择Browse选项,单击进入,就会看到Select Watch这个窗口,在最下面的一栏里输入你想找的测量量即可,可以只搜索部分单词,带这部分的量都会显示出来,选择你想要的量点击Add添加即可。2、有些测量量可能会跳变,不是一个固定的值,那这时候可能需要知道显示值的范围,如果用肉眼看的话,一是不够准确,二是非常麻烦,这时候就需要下面这个操作了。在变量那一栏右击,找到Layout选项,选_ude工具如何排查death

CUDA ---- CUDA库简介-程序员宅基地

文章浏览阅读1.7k次。CUDA Libraries简介上图是CUDA 库的位置,本文简要介绍cuSPARSE、cuBLAS、cuFFT和cuRAND,之后会介绍OpenACC。cuSPARSE线性代数库,主要针对稀疏矩阵之类的。cuBLAS是CUDA标准的线代库,不过没有专门针对稀疏矩阵的操作。cuFFT傅里叶变换cuRAND随机数CUDA库和CPU编程所用到的库没有什么区别,都是..._cufft cublas

INFORMATION_SCHEMA 表_informationschema表-程序员宅基地

文章浏览阅读1.5k次。INFORMATION_SCHEMA 表INFORMATION_SCHEMA 简介 INFORMATION_SCHEMA.CHARACTER_SETS INFORMATION_SCHEMA.COLLATIONS INFORMAT..._informationschema表

结合实战,浅析GB/T 28181(一)——注册保活_国标28181 流保活-程序员宅基地

文章浏览阅读2.3k次,点赞2次,收藏11次。1,注册 GB/T 2818-2016规定:下级域向上级域主动发起注册和保活请求。下级域可以是支持28181的摄像机、存储、解码器、下级国标平台等。上级域可以是上级国标平台、视频网关等。1.1 国标定义1.2信令抓包1.3实战对接常见问题1.3.1 下级域向上级域注册失败可能的原因如下:下级域与上级域注册密码设置的不一样 下级域与上级域密码加密算法不一致 如果不是以上原因引起的,实际对接时,在上级域可以先屏蔽注册认证选项。........._国标28181 流保活

天宝DINI03/莱卡DNA03等电子水准仪原始数据处理软件使用教程_天宝水准仪数据处理-程序员宅基地

文章浏览阅读2w次。1. 软件简介本软件支持处理数据的类型包括:天宝、莱卡、索佳、中纬、南方DL等数字水准仪原始数据。工程监测技术交流QQ群:452847739 工程监测技术交流二群QQ1006913249,会提供持续的软件更新及通知。软件作者QQ:3339745885,关于软件的任何问题欢迎咨询作者。软件下载链接:https://pan.baidu.com/s/1TcHKeR9Dv3kbCD9L0CfvTg 提取..._天宝水准仪数据处理

C语言使用 ASN.1对报文进行编解码(将c函数封装成类简化使用)_asn.1如何通过c语言-程序员宅基地

文章浏览阅读3.5k次,点赞9次,收藏22次。文章目录1、为什么要报文编解码2、ASN.1是什么3、使用函数介绍4、对数据进行编解码使用1、为什么要报文编解码两台机器通信:1、两台机器的操作系统可能不同2、网络传输数据用的是大端模式3、字节序对齐不一样2、ASN.1是什么ASN.1抽象语法标记(Abstract Syntax Notation One) ASN.1是一种 ISO/ITU-T 标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何执行及这些数据的具体指代_asn.1如何通过c语言

随便推点

76道C语言练习题_求n个字符串的最长公共子串,n<=20,字符长度不超过255。 例如n=3,由键盘依次输入三-程序员宅基地

文章浏览阅读5.6k次,点赞3次,收藏3次。 1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不 D F G 同字母。编程求出这些数字并且打出这个数字的 + D F G 算术计算竖式。 ─────── X Y Z D E 2. A、B、C、_求n个字符串的最长公共子串,n<=20,字符长度不超过255。 例如n=3,由键盘依次输入三

K-means聚类算法的小例子_王延召 10-21 11:17:58 1、生成一个二维的数据集200个,100个位于(3,7)为中心-程序员宅基地

文章浏览阅读632次。给定一个二维的数据集,要求化为2个类别。点 x y1 0 02 1 13 5 5 4 5 65 2 0文件内容(路径:D:\name.txt)1,0,02,1,13,5,54,5,65,2,0代码段:from sklearn.cluster import KMeansdef loadData(filePath): fr = open(filePath, 'r+') lines = fr.readlines() retData _王延召 10-21 11:17:58 1、生成一个二维的数据集200个,100个位于(3,7)为中心初始

【软件分享】天若OCR文字识别V4.48(翻译功能免费)_天若ocr专业版 密钥-程序员宅基地

文章浏览阅读7.6k次,点赞5次,收藏13次。软件简介吾爱破解论坛大佬天若幽心开发的一款OCR文字识别工具。支持快速截图识别,以及文本翻译。下载地址蓝奏云盘:点击下载百度网盘:点击下载(密码:4dm4)坚果云盘:点击下载天翼云盘:点击下载微软云盘:点击下载使用教程1、下载后对压缩包进行解压2、双击天若OCR文字识别.exe3、发现桌面右下角出现软件图标4、双击软件图标即可开始截图识别原帖地址https://www.52pojie.cn/thread-692917-1-1.html..._天若ocr专业版 密钥

Introduction to Python Exercises 9.Numpy_numpy frobenius norm-程序员宅基地

文章浏览阅读169次。【前置条件】按照题意,不妨将矩阵A初始化为元素服从标准高斯分布(标准正态分布)的n*m矩阵,将矩阵B初始化为首行为[0, 1, 2, ..., 499]的m*m托普利兹矩阵。import numpy as npfrom scipy.linalg import toeplitz n = 200m = 500A = np.random.randn(n, m) # 元素服从n*m标准高斯..._numpy frobenius norm

4.23 st_dev和st_rdev成员-文件设备号_linux stat st_dev st_rdev-程序员宅基地

文章浏览阅读5.8k次,点赞2次,收藏3次。一、主、次设备号每个文件都有主次设备号,主设备号用来区分不同类型的设备,次设备号用来区分同一类型的不同设备。同一类型的设备具有相同的驱动程序,主设备号用来标识驱动程序。而次设备号用来标识具体指向哪个设备。对于普通文件来讲,其主设备号来标识实际存储设备的主设备号,而次设备号表示所在文件系统的所在分区(可以把同一存储设备的不同分区看成是不同的设备)。二、stat.st_dev和st_rde_linux stat st_dev st_rdev

MacOS基于树莓派的交叉编译实验_mac m1 交叉编译树莓派-程序员宅基地

文章浏览阅读4.8k次。1写一个简单的helloworldc文件2通过arm的gcc编译3登录树莓派执行helloworld1、写一个简单的helloworld.c文件2、通过arm的gcc编译要使用arm-gcc来代替gcc编译,在macOS上还要进行一些配置: 1)新建一个磁盘映像MAC OS的文件系统默认是大小写不敏感的,而交叉编译工具链是基于大小写敏感的文件系统的,所以我们不能直接把工具链安装在原来的文件系_mac m1 交叉编译树莓派

推荐文章

热门文章

相关标签