如何编写自己的Makefile(1)

简介: 如何编写自己的Makefile(1)

如何编写自己的Makefile

编写自己的 Makefile 文件需要理解项目结构和编译过程,以及合理利用 Makefile 中的规则和函数。下面我来举一个简单的示例,假设你有一个包含源代码和头文件的项目,并需要使用 Makefile 进行编译。

项目结构:

project/
|-- src/
|   |-- main.c
|   |-- utils.c
|-- include/
|   |-- utils.h
|-- build/
|-- bin/
|-- Makefile
 
Makefile 示例:
# 定义编译器和编译选项
CC := gcc
CFLAGS := -Wall -I./include
 
# 定义源文件和目标文件路径
SRC_DIR := src
INCLUDE_DIR := include
BUILD_DIR := build
BIN_DIR := bin
 
# 获取源文件和目标文件列表
SRC_FILES := $(wildcard $(SRC_DIR)/*.c)
OBJ_FILES := $(patsubst $(SRC_DIR)/%.c, $(BUILD_DIR)/%.o, $(SRC_FILES))
EXECUTABLE := $(BIN_DIR)/my_program
 
# 默认目标,即执行 make 命令时的默认操作
all: $(EXECUTABLE)
 
# 生成目标文件
$(BUILD_DIR)/%.o: $(SRC_DIR)/%.c
    $(CC) $(CFLAGS) -c $< -o $@
 
# 生成可执行文件
$(EXECUTABLE): $(OBJ_FILES)
    $(CC) $(CFLAGS) $^ -o $@
 
# 清理操作,删除生成的目标文件和可执行文件
clean:
    rm -rf $(BUILD_DIR)/*.o $(EXECUTABLE)
 
# 安装操作,将可执行文件复制到指定目录
install: $(EXECUTABLE)
    cp $(EXECUTABLE) /usr/local/bin
 
# 卸载操作,从系统中移除安装的可执行文件
uninstall:
    rm -f /usr/local/bin/$(notdir $(EXECUTABLE))

在这个示例中,Makefile 定义了一些变量,如编译器 CC、编译选项 CFLAGS,以及源代码、头文件、目标文件等路径。规则部分包括了生成目标文件和可执行文件的规则,以及清理、安装和卸载操作。这样的 Makefile 结构可以根据项目的需要进行调整和扩展。

你可以根据实际项目需求添加更多的规则,如支持调试、优化编译、单元测试等。此外,使用 Makefile 的函数和规则可以更灵活地处理依赖关系、文件路径等问题,使得项目的构建和维护更加方便。

相关文章
|
运维 数据可视化 搜索推荐
低代码平台:10分钟从入门到原理
低代码平台:10分钟从入门到原理
1001 0
|
传感器 JSON 监控
Springboot + oshi 实现对服务器硬件的监控
OSHI是一个免费的基于JNA的(本机)Java操作系统和硬件信息库。它不需要安装任何额外的本地库,旨在提供跨平台实现来检索系统信息,如操作系统版本、进程、内存和CPU使用情况、磁盘和分区、设备、传感器等。
1725 0
|
传感器 人工智能 监控
智慧电厂AI算法方案
智慧电厂AI算法方案通过深度学习和机器学习技术,实现设备故障预测、发电运行优化、安全监控和环保管理。方案涵盖平台层、展现层、应用层和基础层,具备精准诊断、智能优化、全方位监控等优势,助力电厂提升效率、降低成本、保障安全和环保合规。
687 2
智慧电厂AI算法方案
|
6月前
|
存储 安全 数据安全/隐私保护
如何快速部署 ERPNext 多版本?
本文介绍了 ERPNext 多版本快速部署的几种方法,包括基于 Docker 的容器化部署、使用 websoft9 工具的一键部署以及虚拟机部署方案。每种方法适用于不同场景,如功能测试、非技术用户操作或高隔离需求环境。同时涵盖多版本使用的典型场景,如升级测试、团队并行使用和插件兼容性验证,并强调资源分配、数据备份、安全防护等注意事项,助力企业高效管理 ERPNext 多版本应用。
|
存储 监控 Ubuntu
在Linux中,如何进行用户行为监控?
在Linux中,如何进行用户行为监控?
|
9月前
|
监控 搜索推荐 安全
‌301重定向:网站优化与SEO的关键一步
301重定向是网站运营中解决页面路径变更的核心工具,可永久性转移旧URL到新地址,传递权重并保护SEO效果。适用于域名更换、URL结构调整及HTTP到HTTPS跳转等场景。本文详解其原理、操作方法与最佳实践,帮助你掌握这一必备技能,保障用户体验与搜索引擎优化效果。正确配置301重定向对网站健康发展至关重要。
281 2
|
存储 缓存 Linux
GlusterFs分布式文件系统
GlusterFs分布式文件系统
334 8
|
算法 Java iOS开发
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
JDK8到JDK27版本升级的新特性问题之JDK 17中G1在资源占用方面有何变化
|
存储 中间件 API
Node中的AsyncLocalStorage 使用问题之CLS工作的问题如何解决
Node中的AsyncLocalStorage 使用问题之CLS工作的问题如何解决
189 4
|
搜索推荐 Java
深入了解基数排序:原理、性能分析与 Java 实现
基数排序(Radix Sort)是一种非比较性排序算法,它根据元素的每个位上的值来进行排序。基数排序适用于整数或字符串等数据类型的排序。
421 2
深入了解基数排序:原理、性能分析与 Java 实现

热门文章

最新文章