首页 > 其他分享 >Makefile 编译多级目录多个目标文件模板

Makefile 编译多级目录多个目标文件模板

时间:2024-08-13 09:28:50浏览次数:5  
标签:SRC TOP 多级 Makefile dat 模板 DIR BUILD

对于当前目录结构下的Makefile(基于图书管理系统)
.
├── Makefile
├── README.md
├── bin
│ ├── adminsys
│ └── usersys
├── build
│ ├── adminmain.o
│ ├── generalcore.o
│ ├── generalimpl.o
│ ├── generalview.o
│ ├── logincore.o
│ ├── loginimpl.o
│ ├── loginview.o
│ ├── read.o
│ ├── supercore.o
│ ├── superimpl.o
│ ├── superview.o
│ ├── usercore.o
│ ├── userimpl.o
│ ├── usermain.o
│ └── userview.o
├── data
│ ├── book.dat
│ ├── general.dat
│ ├── gid.dat
│ ├── no.dat
│ ├── super.dat
│ ├── uid.dat
│ └── user.dat
├── include
│ ├── book.h
│ ├── generaladmin.h
│ ├── generalcore.h
│ ├── generalimpl.h
│ ├── generalview.h
│ ├── logincore.h
│ ├── loginimpl.h
│ ├── loginview.h
│ ├── read.h
│ ├── superadmin.h
│ ├── supercore.h
│ ├── superimpl.h
│ ├── superview.h
│ ├── user.h
│ ├── usercore.h
│ ├── userimpl.h
│ └── userview.h
└── src
├── admin
│ ├── Makefile
│ ├── adminmain.c
│ ├── generalcore.c
│ ├── generalimpl.c
│ ├── generalview.c
│ ├── logincore.c
│ ├── loginimpl.c
│ ├── loginview.c
│ ├── read.c
│ ├── supercore.c
│ ├── superimpl.c
│ └── superview.c
└── user
├── Makefile
├── read.c
├── usercore.c
├── userimpl.c
├── usermain.c
└── userview.c

根目录Makefile

CC = gcc
CFLAGS = -Wall -Werror

# 根目录路径
TOP_DIR = $(PWD)
# TOP_DIR = .

# 存放中间文件的路径
BUILD_DIR = $(TOP_DIR)/build

# 存放可执行文件的路就路径
BIN_DIR = $(TOP_DIR)/bin

# 存放头文件的文件夹
INC_DIR = $(TOP_DIR)/include

# 存放.c 源文件的文件
SRC_DIR := \
	$(TOP_DIR)/src/admin \
	$(TOP_DIR)/src/user

SRC_ADMIN_DIR := $(TOP_DIR)/src/admin
SRC_USER_DIR := $(TOP_DIR)/src/user

# 在头文件路径前面加上-I
INCLUDE = $(patsubst %, -I %, $(INC_DIR))

VPATH = $(SRC_DIR)

export INCLUDE INC_DIR BIN_DIR BUILD_DIR TOP_DIR CC CFLAGS \
	SRC_ADMIN_DIR SRC_USER_DIR

all:CHECKDIR $(VPATH)
CHECKDIR:
	@mkdir -p $(BUILD_DIR) $(BIN_DIR)
$(VPATH): RUN
	make -C $@
RUN:


.PHONY:clean
clean:
	rm -rf $(BUILD_DIR) $(BIN_DIR)

# $(shell echo $(INCLUDE) > a.txt)  # 调试

底层目录的Makefile

展示的是./src/admin中的makefile

DIR = $(SRC_ADMIN_DIR)
# 得到带路径的.c 文件
CFILES := $(foreach dir,$(DIR),$(wildcard $(dir)/*.c))

# 得到不带路径的.c 文件
CFILENDIR := $(notdir $(CFILES))

# 将工程中的.c 文件替换成 ./build 目录下对应的目标文件 .o
COBJS = $(patsubst %,$(BUILD_DIR)/%,$(patsubst %c,%o, $(CFILENDIR)))

# 可执行文件名
TARGET = $(patsubst %main.c,%sys,$(notdir $(foreach dir, $(DIR), $(wildcard $(dir)/*main.c))))

# 可执行文件列表
# TARGETLIST = $(patsubst %main.c, %sys, $(TARGET))


$(BIN_DIR)/$(TARGET): $(COBJS)
	@echo "$@"
	$(CC) $(CFLAGS) -o $@ $^

$(COBJS): $(BUILD_DIR)/%.o: %.c
	$(CC) $(CFLAGS) $(INCLUDE) -c -o $@ $^

详细教程有空更新...

标签:SRC,TOP,多级,Makefile,dat,模板,DIR,BUILD
From: https://www.cnblogs.com/sleeeeeping/p/18356192

相关文章

  • 【C++面向对象】泛型编程(模板) 新手小白都能懂!
    目录泛型编程是什么?模板和泛型编程的关系?函数模板定义调用类模板定义调用总结/小注泛型编程是什么?顾名思义,“泛型”即“广泛的类型”,即不拘泥于一种特定类型的编程方法。在泛型编程时,我们通常使用一个或多个类型占位符来表示一种或多种类型,这些类型对于模板而言......
  • 帝国cms手机端模板怎么用
    帝国CMS手机端模板为网站提供优化后的移动端浏览体验。使用帝国CMS手机端模板非常简单,以下是分步指南:步骤1:查找并下载模板访问帝国CMS官方网站或第三方模板市场,浏览和下载您喜欢的手机端模板。步骤2:上传模板到帝国CMS登录帝国CMS后台,导航到“模板管理”>“手机端模板”......
  • 洛谷 P4556 雨天的尾巴之线段树合并模板
    洛谷P4556题解传送锚点摸鱼环节[Vani有约会]雨天的尾巴/【模板】线段树合并题目背景深绘里一直很讨厌雨天。灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切。虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连根拔起,以......
  • 【Linux】项目自动化构建工具-make/Makefile(入门初使用)
    make/Makefile1.什么是make/makefile?为什么要使用?2.如何使用make/makefile(1)makefile基础框架1.规则2.规则的实现(2)如何与make搭配使用?3.文件的时间戳4.常用语法补充语法一:.PHNOY文件名语法二:$@与$^语法三:makefile里面可以定义变量参考文章:爱编程的大丙......
  • 大模型agent开发之prompt提示词模板
    提示词工程的建模在大模型对话agent的开发中有着重要的地位,好的提示词模板可以辅助大模型做出更加准确的预测,得到更加准确的答案。本文使用langchain进行agnent开发,langchain中封装了很多工具和方法其中就包括不同的prompt模板,接下来本文将详细介绍几种不同风格的prompt模板的使用......
  • makefile相关
    1.makefile示例以及解析:#定义编译器和编译选项CC=gccCFLAGS=-Wall-Wextra-pedantic-std=c99LDFLAGS=-lm#定义项目目录和文件SRCDIR=srcOBJDIR=objBINDIR=binINCDIR=includeLIBDIR=lib#查找源文件SRCS=$(wildcard$(SRCDIR)/*.c)OBJS=$(SRCS:$(SRCDIR)/%.c......
  • 中后台管理信息系统:打造高效原型设计的12套通用框架模板
    在数字化转型的大潮中,中后台管理信息系统作为企业内部管理的核心支撑,其设计与实现直接影响着企业的运营效率与决策能力。为了高效、精准地满足多样化的中后台管理系统开发需求,一套全面、灵活的原型设计方案显得尤为重要。本文将深入探讨一款集成了12套精心设计的框架模板的中后......
  • 4.makefile自动推导目标代码配置和伪目标clean清理
    4.makefile自动推导目标代码配置和伪目标clean清理4.1make和makefilemakefile文件主要包含了5部分内容:显式规则。说明了如何生成一个或多个目标文件。由makefile文件的创作者指出,包括要生成的文件、文件的依赖文件、生成的命令。隐式规则。由于make有自动推导的功能,所以隐......
  • 【模板】缩点
    \[\Large给出一个图,求出SCC后缩点得到新的图\]做法:Tarjan记录scc然后根据SCC去重新建图#include<cstdio>#include<stack>#include<algorithm>#include<iostream>#include<cstring>#include<vector>#include<queue>#defineepemplace_b......
  • 011.Vue3入门,计算属性的使用,让模板语法更简洁
    1、代码如下:<template><h3>计算属性</h3><div>{{func1}}</div><div>{{func1}}</div><div>{{func1}}</div><!--<div>{{func1()}}</div>--><!--<div>{{func1()}}&......