C语言项目开发常用目录结构 - Invinc

本文记录了C语言项目开发中常用的目录结构。


C 语言项目的目录规范没有统一标准,但行业中形成了一些通用的目录结构,目的是提高代码可维护性、分离不同类型的文件,尤其适合中大型项目。以下是一套经典且实用的目录规范,可根据项目规模灵活调整:

一、基础目录结构(中小型项目)

project_name/               # 项目根目录
├── src/                    # 源代码目录(核心逻辑)
│   ├── main.c              # 程序入口(main函数)
│   ├── module1/            # 模块1(如网络模块)
│   │   ├── module1.c       # 模块1实现
│   │   └── module1.h       # 模块1头文件(对外接口)
│   └── module2/            # 模块2(如工具函数)
│       ├── module2.c
│       └── module2.h
├── include/                # 公共头文件目录(供外部引用)
│   └── project_common.h    # 全局宏定义、类型定义等
├── lib/                    # 第三方库或静态/动态库
│   ├── libxxx.a            # 静态库
│   └── libxxx.so           # 动态库(Linux)/ libxxx.dll(Windows)
├── obj/                    # 编译生成的目标文件(.o/.obj)
├── bin/                    # 最终可执行文件
├── test/                   # 测试代码目录
│   ├── test_module1.c      # 模块1的单元测试
│   └── test.sh             # 测试脚本
├── docs/                   # 文档目录
│   ├── design.md           # 设计文档
│   └── api.md              # 接口文档
├── config/                 # 配置文件(如编译选项、环境配置)
│   └── config.ini
├── Makefile                # 编译脚本(核心,控制整个项目构建)
└── README.md               # 项目说明(功能、编译方式、使用方法)

二、目录说明(核心目录详解)

  1. src/:源代码目录

    • 存放所有 .c 实现文件和模块内的私有 .h 头文件(仅模块内部使用)。
    • 按功能模块划分子目录(如 network/utils/storage/),避免所有文件堆在一起。
  2. include/:公共头文件目录

    • 存放对外暴露的头文件(其他模块或外部项目需要引用的接口),确保 “实现私有化,接口公开化”。
    • 例如全局类型定义(typedef)、公共函数声明、宏定义(如 MAX_LEN)等。
  3. lib/:库文件目录

    • 存放项目依赖的第三方库(如 libcurllibmysql)或自己编译生成的库文件。
    • 静态库(.a)会被编译到可执行文件中,动态库(.so/.dll)则在运行时加载。
  4. obj/:目标文件目录

    • 编译过程中生成的 .o(Linux)或 .obj(Windows)文件存放于此,避免污染源代码目录。
    • 可通过 Makefile 自动创建,编译完成后可删除(不影响可执行文件)。
  5. bin/:可执行文件目录

    • 存放编译生成的最终程序(如 mainserver),方便直接运行或部署。
  6. test/:测试目录

    • 存放单元测试(如用 assert 或测试框架 Check 编写)、集成测试代码,确保模块功能正确性。
  7. Makefile:构建核心

    • 定义编译规则(如依赖关系、编译选项 -Wall -O2、链接库 -lxxx),通过 make 命令一键编译。

    • 示例片段:

      CC = gcc
      CFLAGS = -Iinclude -Wall -O2  # 包含include目录,开启警告,优化
      LDFLAGS = -Llib -lxxx         # 链接lib目录下的libxxx库
      OBJ_DIR = obj
      BIN_DIR = bin# 编译目标文件
      $(OBJ_DIR)/main.o: src/main.c$(CC) $(CFLAGS) -c $< -o $@# 链接生成可执行文件
      $(BIN_DIR)/main: $(OBJ_DIR)/main.o $(OBJ_DIR)/module1.o$(CC) $^ -o $@ $(LDFLAGS)
      

三、大型项目扩展(可选)

  • scripts/:存放构建脚本(如 build.sh)、部署脚本(deploy.sh)、清理脚本(clean.sh)。
  • examples/:存放示例代码(如 demo.c),方便用户快速上手。
  • logs/:运行时日志文件(需在代码中指定路径)。
  • third_party/:存放第三方源码(如直接嵌入项目的开源库,而非预编译的 lib/)。

四、核心原则

  1. 分离关注点:源代码、头文件、库、编译产物、文档严格分开。
  2. 模块化:按功能拆分目录,每个模块内部高内聚,模块间低耦合。
  3. 可扩展性:新增模块时只需在 src/ 下建子目录,修改 Makefile 即可,无需重构整体结构。

遵循规范可让项目结构清晰,方便团队协作和后期维护,尤其在多人开发或项目迭代时优势明显。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/942578.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

day03-Coze记忆-对话体验

今日内容 1 智能体之记忆(个人记账本) # 1 个人记账本:1 我们每天花费---》传给 智能体2 利用智能体记忆功能--》记录每笔花费3 统计每天花费4 统计每月花费# 2 记忆功能1 变量:常用的东西2 数据库:非常重要 -永久…

2025年流量计厂家权威推荐榜单:电磁流量计、超声波流量计、涡街流量计、质量流量计专业制造商深度解析

2025年流量计厂家权威推荐榜单:电磁流量计、超声波流量计、涡街流量计、质量流量计专业制造商深度解析 在工业自动化与过程控制领域,流量计作为关键测量仪表,其性能与可靠性直接影响生产效率和产品质量。随着智能制…

RNDIS让Air8000的USB上网更智能、更快速!

借助RNDIS协议的智能特性,Air8000的USB上网功能变得更加高效和快速。用户在连接设备时,系统会自动完成网络配置,实现极速上网,提升整体使用体验。 一、Air8000 USB 上网应用概述 本章将带你使用 RNDIS 的方式,搭配…

如果k8s有三个calico节点A,B,C 使用bgp模式的话是如何进行BGP对等会话的

在 Kubernetes 集群中,如果使用 Calico 的 BGP 模式,并且有三个节点 A、B、C,它们之间如何建立 BGP 对等会话,取决于您在 Calico 中配置的 BGP 网络拓扑模式。 Calico 主要支持两种模式来管理这三个节点间的 BGP 会…

2025年栏杆护栏厂家权威推荐榜:不锈钢栏杆、桥梁防撞护栏、河道景观护栏专业制造商精选

2025年栏杆护栏厂家权威推荐榜:不锈钢栏杆、桥梁防撞护栏、河道景观护栏专业制造商精选 随着城市化进程加速和基础设施建设不断完善,栏杆护栏行业迎来了前所未有的发展机遇。作为公共安全的重要保障,各类护栏产品在…

Day1标签语法

第一个标签的含义是将字体加粗,这是双标签,结束标签相比开始标签需要多一个/符号 而双标签与单标签的区在于双标签要包含某个内容,单标签则不用,在实际应用当中。也是双标签居多 第二行的标签含义是在字符的下方添…

home-assistant-Concepts and terminology概念和术语

Concepts and terminology概念和术语Now you’re in Home Assistant, let’s look at the most important concepts. 现在你在家庭助理,让我们看看最重要的概念。Integrations集成 Integrations are pieces of softwa…

2025年印染水洗机厂家权威推荐榜:高效水洗设备与环保节能技术深度解析,专业水洗机厂家精选

2025年印染水洗机厂家权威推荐榜:高效水洗设备与环保节能技术深度解析,专业水洗机厂家精选 随着全球纺织印染行业向绿色化、智能化方向转型升级,水洗机作为印染工艺流程中的关键设备,其技术性能与环保指标已成为影…

2025年定型机厂家推荐排行榜,拉幅定型机,门富士定型机,节能定型机,余热回收,废气回收,烟气回收,智能排风,双层定型机公司推荐

2025年定型机厂家推荐排行榜:拉幅定型机、门富士定型机、节能定型机技术深度解析 行业背景与发展趋势 纺织印染行业作为传统制造业的重要组成部分,正面临着节能减排、智能化升级的迫切需求。在"双碳"目标背…

华容道 BFS DFS C++ Python 短程序

图片来自百度华容道吧。第二步卒子像军旗的工兵在铁道上跑——比我们的局面变化数少。E =   # 全角空格class Brd:def __str__(m): return \n.join([.join(r) for r in m.b])def totuple(m): return tuple(tuple(r) f…

home-assistant-Onboarding Home Assistant(入职家庭助理)

Onboarding Home Assistant(入职家庭助理) After Home Assistant has been installed on your device, there are 5 steps to complete setting up Home Assistant.在您的设备上安装家庭助理后,有5个步骤来完成设置家…

有关K8s calico IPIP模式的一些疑惑和思考

疑问: calico的IPIP模式的隧道是不是只是抽象概念,物理上实际是不存在这个网络隧道的,数据包还是通过路由器进行跨网段传输连接的。 答: Calico 的 IPIP 模式中的“隧道”在物理链路(如网线、光纤)上并不存在一条…

1.正手握拍

1.球拍有8个面 2个宽面、2个窄面 4个小侧棱 2.握手的方式 虎口对着小侧棱,拇指和食指贴着宽面 (所有手指不能叠在一起,食指在最上面,然后大拇指,后三指 )

2025年角接触轴承厂家推荐排行榜,高精度/高承载/高精密/机床主轴/汽车/定制/可替代进口/高转速/高刚性角接触球轴承公司推荐

2025年角接触轴承厂家推荐排行榜:高精度/高承载/高精密/机床主轴/汽车/定制/可替代进口/高转速/高刚性角接触球轴承公司推荐 行业背景与发展趋势 角接触轴承作为精密机械传动领域的核心部件,其技术水平和产品质量直接…

7-Zip最新版 7-Zip25.01

软件:7-Zip25.01版本:25.01 (2025-08-03) for Windows语言:简体中文(以及全球各国语言)大小:1.56 MB (1,643,509 字节)安装环境:Win7及以上操作系统 下载链接: 夸克网盘下载 1.把资源从网盘下载到电脑上面,双…

datadome 二维数组

function PA(A, e, c, a, n, s, t) {return (a * c ^ s * e ^ A * t) >>> 0 & n - 1; }var n = function() {var A;var e;var c;var a = [];for (A = 0; A < 128; A++) {a[A] = new Array(512);}for (…

2025年精密球轴承厂家权威推荐榜:半导体设备轴承,机床主轴轴承,真空泵轴承,国产高端精密球轴承,晶圆搬运机械手臂不锈钢轴承

2025年精密球轴承厂家权威推荐榜:半导体设备轴承,机床主轴轴承,真空泵轴承,国产高端精密球轴承,晶圆搬运机械手臂不锈钢轴承 行业背景与发展趋势 精密球轴承作为现代工业装备的核心基础零部件,其性能直接影响着整…

结对项目-实现四则运算题目的命令行程序

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/这个作业要求在哪里 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/homework/13479这个作业的目标 …

从易路iBuilder平台看企业人力资源的AI转型升级与变革

引言:AI浪潮下的HR新范式 在当前全球经济与技术飞速发展的背景下,企业正面临前所未有的复杂挑战。数字化转型已成为企业保持竞争力的关键,而人力资源(HR)作为企业战略的核心支柱,其转型升级的紧迫性与重要性日益…

UMDF驱动开发入门:创建虚拟设备,从安装到I/O交互全解析

这篇博客详细介绍了UMDF驱动的基本概念、生命周期、代码实现和应用交互,适合初学者入门 • 目的:创建一个“虚拟设备”(软件模拟的设备),让用户模式应用程序(比如你的C#或C++程序)能与之“对话”。它不控制真…