Linux-Makefile 编译指定目录下所有源文件 (集成开发环境IDE 原理)

更新说明

不定期更新:

  1. 编译后的目标文件.o统一存放在目录.ojb下
  2. 添加lib库路径配置

git仓库
makefile

1. 描述

与常规而言,此makefile只需指定需要编译的工程目录/文件即可。 指定项目头文件和源文件路径,脚本自动编译和链接源文件。(类似IAR、QT等集成开发环境,只需指定工程文件目录)

2. 源文件

makefile:

#			-readme-			#
# 功能:自动捕获指定路径下的工程文件,再进行编译&链接
# 变量:
#	include:头文件路径
#	source: 源文件路径
TARGET	:= proc_test
CC	:= gcc
CFLAGS  = -g -Wall $(INCS_P)	#1 设置编译选项:		# 在编译.c文件时	#-I:指定头文件路径 L:链接lib库 -Wl,R:动态链接lib库
LDFLAGS	= -lpthread -lm     	#2 指定链接器要链接那些库文件	# 在链接.o文件时

# 			指定项目头文件和源文件路径		 #
include := ./
source  := ./
#			指定不编译的文件				#
src_out := #./realtime/source/rtdb_gdw376.c ./commons/test/*.c ./config/test/*.c ./mqtt/test/*.c ./realtime/test/*.c ./modbus/test/*.c

## 添加链接器-I文件路径
incs := $(shell find ${include} -name "*.h")    # 1、获取当前目录下,所有.h文件
incs := $(dir ${incs} hacks)                    # 2、过滤:只取文件路径,丢弃
incs := $(sort $(incs))                         # 3、过滤相同的单词, 并排序
INCS_P := $(foreach n,$(incs),-I$(n))           # 4、循环追加-I

## 汇编目录下.c源文件
srcs := $(shell find ${source} -name "*.c")     # 预汇编:捕获目录下所有源文件
src_out := $(shell ls ${src_out})           # 展开需要过滤的源文件
srcs := $(filter-out $(src_out),$(srcs))    # 过滤源文件
OBJS := $(patsubst %.c,%.o,$(srcs))             # 汇编:替换(编译)所有%.c -> %.o

$(TARGET): $(OBJS)
	gcc $^ -o $@ $(LDFLAGS)



# 调试
.PHONY:debug debug_as debug_ld
debug:
	@echo "变量:INCS_P"
	@echo ${INCS_P}
	@echo ${}
	@echo ${srcs}
debug_as:
	@echo "汇编器as:"
	@echo $(CC) { $(CFLAGS) } -c -o xx.o xx.c
debug_ld:
	@echo "链接器ld:"
	@echo $(CC) xx.o -o $(TARGET) { $(LDFLAGS) }
	

.PHONY:clean clean_obj
clean:
	rm -f $(TARGET) $(OBJS)
clean_obj:
	rm -f $(OBJS)

3. 介绍

只需配置几个参数
请添加图片描述

4. 用法&示例

请添加图片描述

5. demo

  1. 可通过传参,后续使用界面配置编译工程。 制作集成开发环境IDE
  2. 将makefile制作为vscode插件,能在线编译Linux&arm小型测试程序?
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值