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

该文章介绍了一个自动编译和链接源文件的Makefile配置,通过指定工程目录和文件,自动捕获并处理头文件路径。它使用GCC编译器,支持库文件链接,并提供过滤和排序机制来优化编译过程。此外,文章还提到可以将此Makefile集成到VSCode等IDE中,实现在线编译Linux和ARM平台的小型测试程序。

GIT仓库

描述

Makefile自动编译当前目录和子目录下所有C/C++源文件,并支持手动配置(源文件、头文件、库文件、过滤文件)路径。

Makefile

# Makefile for Building Project
# Features: Automatically captures and compiles/link project files in the specified paths
# COMPILER_*: make external variable
# Variables:
INCLUDE := ./
SOURCE  := ./
LIBRARY  = 
LIBLINK  = -lpthread -lm -lrt -ldl
FFILTER  = # ./test.c
OBJPATH  = .obj
# COMPILER_PREFIX := arm-openwrt-linux-gnueabi-		# Cross compile toolchain

# config
TARGET  := demo
CC      := $(COMPILER_PREFIX)gcc
CXX     := $(COMPILER_PREFIX)g++
STRIP	:= $(COMPILER_PREFIX)strip
DEBUG   := -Wall -O2 -static # -g0 -g #-Os #-fno-stack-protector #-fsanitize=address
CFLAGS   = -c $(INCPATH) $(DEBUG) $(COMPILER_CFLAGS) -fPIE
LDFLAGS += $(LIBLINK) $(LIBRARY)

INCS 	:= $(shell find ${INCLUDE} -name "*.h")
INCS 	:= $(dir ${INCS} hacks)
INCS 	:= $(sort $(INCS))
INCPATH := $(foreach n,$(INCS), -I$(n))

SRCS	:= $(shell find ${SOURCE} -name "*.c")
OUTS	:= $(shell ls ${FFILTER})
SRCS	:= $(filter-out $(OUTS), $(SRCS))
COBJS	:= $(patsubst %.c, $(OBJPATH)/%.o, $(SRCS))

CPPS    := $(shell find ${SOURCE} -name "*.cpp")
OUTS	:= $(shell ls ${FFILTER})
CPPS    := $(filter-out $(OUTS), $(CPPS))
CPPOBJS := $(patsubst %.cpp, $(OBJPATH)/%.o, $(CPPS))


$(TARGET): $(COBJS) $(CPPOBJS)
	$(CXX) $^ -o $@ $(LDFLAGS)
	$(STRIP) $(TARGET)

# Compilation rules
$(OBJPATH)/%.o: %.c
	@mkdir -p $(dir $@)
	$(CC) $(CFLAGS) -c $< -o $@

$(OBJPATH)/%.o: %.cpp
	@mkdir -p $(dir $@)
	$(CXX) $(CFLAGS) -c $< -o $@


.PHONY: clean debug gobuild
clean:
	rm -f ${TARGET}
	rm -rf ${OBJPATH}

debug:
	@echo "CC=${CC}  CXX=${CXX}"
	@echo "COMPILER_LIB_PATH=${COMPILER_LIB_PATH}  COMPILER_PREFIX=${COMPILER_PREFIX} CFLAGS=${CFLAGS}"
	@echo "End debug"

用法
请添加图片描述

用法&示例
请添加图片描述
拓展

  1. 可通过传参,后续使用界面配置编译工程。 制作集成开发环境IDE
  2. 将makefile制作为vscode插件,能在线编译Linux&arm小型测试程序?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值