一个通用的Makefile(自动遍历文件、C和C++混合)_makefile遍历所有c文件_AntigravityCC的博客-程序员秘密

技术标签: 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 [email protected] $(INC_PATH) $(LIB_PATH);

%.o : %.c

	$(CC) $(DEBUG_FLAG) $< -c -o  [email protected] $(INC_PATH) $(LIB_PATH);

$(TARGET) : $(OBJS)

	$(CXX) $(DEBUG_FLAG) $^ -o [email protected] $(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 [email protected] $(INC_PATH) $(LIB_PATH);

%.o : %.c

	$(CC) $(DEBUG_FLAG) $< -c -o  [email protected] $(INC_PATH) $(LIB_PATH);


$(TARGET) : $(OBJS)

	$(CXX) $(DEBUG_FLAG) $^ -o [email protected] $(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

智能推荐

天梯赛习题 L2-021. 点赞狂魔_落辰哀的博客-程序员秘密

L2-021. 点赞狂魔时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这种人就被称为“点赞狂魔”。他们点赞的标签非常分散,无法体现出明显的特性...

PAT L2-021. 点赞狂魔_Ambition_Bit的博客-程序员秘密

L2-021. 点赞狂魔时间限制200 ms内存限制65536 kB代码长度限制8000 B判题程序Standard作者陈越微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这种人就被称为“点赞狂魔”。他们点赞的标签非常分散,无法体现出明显的特性...

L2-021 点赞狂魔_ChenyutingZJU的博客-程序员秘密

L2-021 点赞狂魔 微博上有个“点赞”功能,你可以为你喜欢的博文点个赞表示支持。每篇博文都有一些刻画其特性的标签,而你点赞的博文的类型,也间接刻画了你的特性。然而有这么一种人,他们会通过给自己看到的一切内容点赞来狂刷存在感,这种人就被称为“点赞狂魔”。他们点赞的标签非常分散,无法体现出明显的特性。本题就要求你写个程序,通过统计每个人点赞的不同标签的数量,找出前3名点赞狂魔。输入格式:...

shapefile文件的内部结构剖析_论述shapefile文件结构_遇见更好的自己MrZhu的博客-程序员秘密

中文释义如下:字节 类型 字节序 用途 0–3 int32 大端序 文件编号 (永远是十六进制数0x0000270a) 4–23 int32 大端序 五个没有被使用的32位整数 24–27 int32 大端序 文件长度,包括文件头。(用16位整数表示) 28–31 int32 小端序 ...

VS编译警告 : LINK : warning LNK4076: invalid incremental status file './Debug/.ilk'; linking nonincr_"invalid incremental status file \"debug/fzf.ilk\"_monster_2495的博客-程序员秘密

如题:在一次编译连接出错后就出现 LINK : warning LNK4076: invalid incremental status file './Debug/.ilk'; linking nonincr这样的连接警告.Cause:工程中Debug目录下的.ilk文件出错,导致警告的发生.其实该警告没有什么大不了,对编译连接影响不大,其作用主要在于记录每次编译时工程中修改过

数据仓库实践杂谈(九)——增量/全量_全量增量_老程序员一叶知秋的博客-程序员秘密

数据仓库的两个重要的概念是:- 进入仓库的数据不可变;- 记录数据的变化历史。如何理解呢?不可变,意味着进到仓库的数据就类似归档了。原则上,不能对仓库里面的数据进行修改;如果随意的对仓库里面的数据进行修改,这个“仓库”就和交易系统没区别了,无法起到正确反映业务过程的作用。此外,适合于数据仓库的存储服务,如早年Oracle和DB2都有针对数据仓库的Data Warehouse产品,以及Hadoop体系的一系列组件,都是针对“批量插入,无更改或少量更改”而专门设计的,所以才能达到查询效率的最优化。也因此

随便推点

CogCalibNPointToNPointTool工具使用详解 标定和定位工具_npoint只能校正什么_钢铁男儿的博客-程序员秘密

CogCalibNPointToNPointTool工作原理CogCalibNPointToNPointTool工具两组点来校正图像,一组点为像素坐标点,另一组点是像素坐标点对应的物理坐标点,此工具用这两组点计算一个最佳的2D转换,并将此2D转换保存工具中,在此工具运行的时候将此2D转换添加到输入图像的坐标空间树中,并输出校正后的图像。CogCalibNPointToNPointTool使用步骤CogCalibNPointToNPointTool工具的使用可以分为以下几步:1)通过CogPM

转载: php发送邮件原理_weixin_30235225的博客-程序员秘密

  (本文转自: http://blog.163.com/[email protected]/blog/static/665971972010109114247408/)一个发送E-MAIL的脚本也许是你能够在Web 站点上找到的最普通的脚本之一了,虽然它很简单,一个邮件脚本有时会令程序员非常沮丧.PHP中有一个叫做mail()的函数,它只需要知道接收方的地址 和信件主体就可以发送邮件,但...

创建项目npm报错 : 无法加载文件 D:\Program Files\nodejs\node_global\weex.ps1,因为在此系统上禁止运行脚本。_重新创建 npm.ps1_火兰的博客-程序员秘密

 使用weex新建一个app,发现npm报错:npm : 无法加载文件 D:\Program Files\nodejs\node_global\weex.ps1,因为在此系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。所在位置 行:1 字符: 1+ npm run dev+ ~~~ + CategoryInfo : Securi

Implicit 语法举例_impleit语句_IBAS的博客-程序员秘密

例子一、最简单的理解就是可以做隐式类型转换例子二、然后也可以是扩展方法,这个和C#的语法糖看起来相似,L14 和 L15 是一样的例子三、隐式参数,这里定义了一个 trait 我是理解为接口,通过定义一个实例对象并实现其中的方法,最终调用的时候,我写的是showOne(12),编译器在执行时会变成showOne(12)(jwInt)这个例子如果想要扩展到 String,需要继续实例化一个 jwString:JW[String] 对象,也就是每次都要写很多类型的代码,可以简...

服务器更新维护尚未完成,尊敬的玩家,2020年3月19日(周四)7:00-11:00_weixin_39640090的博客-程序员秘密

该楼层疑似违规已被系统折叠隐藏此楼查看此楼尊敬的玩家,2020年3月19日(周四)7:00-11:00游戏将进行服务器停机维护更新,服务器停机期间将无法登陆游戏。维护预计进行4小时,如果计划时间内未完成维护,开服时间也将顺延。请您提前计划下线时间,避免由于掉线造成的损失。由此对您造成的不便我们深表歉意。感谢大家的理解和支持,服务器维护结束后,我们将发放补偿奖励,祝您游戏愉快!更新内容说明:【活动...

面试官问:生成订单30分钟未支付,则自动取消,该怎么实现?_hello-java-maker的博客-程序员秘密

今日推荐借助Redis锁,完美解决高并发秒杀问题还在直接用JWT做鉴权?JJWT真香Spring Boot 操作 Redis 的各种实现Fluent Mybatis 牛逼!...