描述
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"
用法

用法&示例

拓展
- 可通过传参,后续使用界面配置编译工程。 制作集成开发环境IDE
- 将makefile制作为vscode插件,能在线编译Linux&arm小型测试程序?
该文章介绍了一个自动编译和链接源文件的Makefile配置,通过指定工程目录和文件,自动捕获并处理头文件路径。它使用GCC编译器,支持库文件链接,并提供过滤和排序机制来优化编译过程。此外,文章还提到可以将此Makefile集成到VSCode等IDE中,实现在线编译Linux和ARM平台的小型测试程序。
&spm=1001.2101.3001.5002&articleId=129144156&d=1&t=3&u=a7a4970d623e4f939b66feef4f0e0b82)
507

被折叠的 条评论
为什么被折叠?



