C++项目准备工作

C++项目准备工作
GuoTianyuC++项目文件目录
C++项目要根据具体情况来确定文件目录结构,并不是一成不变的,设计良好的文件结构有助于提高项目的可维护性、可扩展性和开发效率,因此,根据项目的具体需求和上下文来设计合适的文件结构是非常重要的。下面是一种项目常用文件目录:
- bin目录:存放编译后的可执行文件,bin目录的使用可以让用户方便地找到和运行项目的可执行程序。
- bulid目录:通常用于存放编译过程中产生的所有中间文件,例如对象文件(.o或.obj)、依赖文件、库文件等。使用 build 目录的好处是它可以保持源代码目录的清洁,所有的构建产物都不会污染源代码树。
- examples目录:提供一些简单的示例代码,展示如何使用项目的主要功能。
- lib目录:将项目所依赖的外部静态库( .a )或动态库( .so 或 .dll )放在这里。
- include目录:用于存放项目的头文件(.h或.hpp),将头文件集中放在这个目录,方便管理和维护代码的接口部分,使得其他代码可以方便地找到所需的声明。
- src目录: 主要放置源文件(.cpp)。这里是函数和类的具体实现代码所在地。源文件通过包含include目录中的头文件来实现相应的功能,把实现细节放在这个目录,使项目结构清晰,便于代码的编写和阅读。
- test目录:这些测试文件可以调用src目录中的功能代码来验证其正确性,有助于保证项目质量。
- 其它目录:
- doc/:存放项目文档,如设计文档、用户手册、API文档等。
- data/:主要用来存放数据相关的文件。
- scripts/:放置项目的构建脚本,如 Makefile 或 CMakeLists.txt。
C++项目构建工具
在Linux上,GCC(GNU Compiler Collection)和G++是两个常用的编译器,在编译源文件时,它们都是通过命令来进行编译的。现在,我们创建一个简单的C++源文件hello.cpp
1 |
|
我们可以使用下面的命令来编译源文件
1 | g++ hello.cpp -o hello |
会生成可执行文件hello,然后我们运行这个文件
1 | ./hello |
运行成功!并打印出 Hello, World!
- 这里就一个源文件,写起来当然轻松,而且文件之间的依赖也几乎没有,那么如果有10个、20个……100个文件呢?它们之间的依赖关系会非常复杂,并且g++命令会很长,写起来会非常繁琐 _(:з」∠)_
- 那么,我们怎么解决这个问题呢?使用项目构建工具!现在有比较流行的项目构建工具make、CMake,以及Qt的qmake等等,利用这些项目构建工具能够自动化和标准化构建流程,提高开发效率,减少人为错误,确保跨平台的一致性,并便于项目的持续集成和部署。
- 下面是由CMake管理的项目,让我们看看项目是怎么被方便管理的:
- 先创建CMakeLists.txt文件,然后在里面写
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15//指定CMake的最小版本
cmake_minimum_required(VERSION 3.24)
//定义项目工程名称
project(protectName)
//指定C++标准
set(CMAKE_CXX_STANDARD 17)
//搜索当前目录下所有的源文件,并存入变量SRC中
aux_source_directory(./ SRC)
//取出变量SRC里面的文件,并生成可执行文件protectName
add_executable(protectName ${SRC}) - 构建和编译项目
1
cmake . && make
- 运行项目
1
./projectName
- 使用项目构建工具,还能让我们更加方便地管理项目文件目录,关于CMake的具体细节请看我的这篇文章
版本控制系统
一般情况下,一个项目都是一个团队共同完成的。在没有版本控制系统之前,共同完成一个项目的效率可是很低下的。一般都是一个程序员写完负责的代码块,然后把代码打包,交给另一个程序员去完成,后来有了局域网共享文件夹的方式,但是由于网络原因,以及管理方式,效率也并没有提升很多,并且容易出错。
什么是版本控制系统
版本控制系统(Version Control System,简称VCS)是一种软件工具,用于记录文件和目录的变更历史,以便多个开发者可以协作开发项目。它允许用户保存文件的不同版本,并在需要时回退到之前的版本。
版本控制系统的关键特性和用途
- 跟踪变更:记录文件和目录的修改历史,包括添加、删除和修改。
- 版本回退:允许用户在发现错误或需要旧版本时,将文件恢复到之前的版本。
- 分支管理:支持创建不同的开发分支,使得开发者可以在不影响主分支的情况下进行实验和开发。
- 合并和冲突解决:当开发者在不同分支上工作后,可以将这些分支合并回主分支,并解决可能出现的冲突。
- 协作:支持多人协作开发,每个开发者都可以在本地保存项目的完整副本,并在需要时与中央仓库同步。
- 审计和责任:记录每次变更的作者、时间和原因,方便追踪问题和责任归属。
- 备份:提供自动备份功能,减少数据丢失的风险。
- 跨平台:许多版本控制系统可以在不同的操作系统上运行,如Windows、Linux和Mac OS。
- 集成工具:可以与IDE(集成开发环境)、构建工具和持续集成/持续部署(CI/CD)系统等其他工具集成。
- 权限管理:可以设置不同级别的访问权限,控制谁可以查看、修改或提交代码。
常见的版本控制系统
- Git:一个分布式版本控制系统,是目前最流行的VCS之一。
- Subversion(SVN):一个集中式版本控制系统,曾经非常流行。
- Mercurial:另一个分布式版本控制系统,与Git类似但有不同的设计理念。
- CVS:一个较老的集中式版本控制系统。