C++项目准备工作

C++项目文件目录

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
2
3
4
5
#include <iostream>
int main() {
std::cout << "Hello, World!" << std::endl;
return 0;
}

我们可以使用下面的命令来编译源文件

1
g++ hello.cpp -o hello

会生成可执行文件hello,然后我们运行这个文件

1
./hello

运行成功!并打印出 Hello, World!

  • 这里就一个源文件,写起来当然轻松,而且文件之间的依赖也几乎没有,那么如果有10个、20个……100个文件呢?它们之间的依赖关系会非常复杂,并且g++命令会很长,写起来会非常繁琐 _(:з」∠)_

  • 那么,我们怎么解决这个问题呢?使用项目构建工具!现在有比较流行的项目构建工具makeCMake,以及Qt的qmake等等,利用这些项目构建工具能够自动化和标准化构建流程,提高开发效率,减少人为错误,确保跨平台的一致性,并便于项目的持续集成和部署。
  • 下面是由CMake管理的项目,让我们看看项目是怎么被方便管理的:
  1. 先创建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})

  2. 构建和编译项目
    1
    cmake . && make
  3. 运行项目
    1
    ./projectName
  • 使用项目构建工具,还能让我们更加方便地管理项目文件目录,关于CMake的具体细节请看我的这篇文章
CMake教程

版本控制系统

一般情况下,一个项目都是一个团队共同完成的。在没有版本控制系统之前,共同完成一个项目的效率可是很低下的。一般都是一个程序员写完负责的代码块,然后把代码打包,交给另一个程序员去完成,后来有了局域网共享文件夹的方式,但是由于网络原因,以及管理方式,效率也并没有提升很多,并且容易出错。

什么是版本控制系统

版本控制系统(Version Control System,简称VCS)是一种软件工具,用于记录文件和目录的变更历史,以便多个开发者可以协作开发项目。它允许用户保存文件的不同版本,并在需要时回退到之前的版本。

版本控制系统的关键特性和用途

  • 跟踪变更:记录文件和目录的修改历史,包括添加、删除和修改。
  • 版本回退:允许用户在发现错误或需要旧版本时,将文件恢复到之前的版本。
  • 分支管理:支持创建不同的开发分支,使得开发者可以在不影响主分支的情况下进行实验和开发。
  • 合并和冲突解决:当开发者在不同分支上工作后,可以将这些分支合并回主分支,并解决可能出现的冲突。
  • 协作:支持多人协作开发,每个开发者都可以在本地保存项目的完整副本,并在需要时与中央仓库同步。
  • 审计和责任:记录每次变更的作者、时间和原因,方便追踪问题和责任归属。
  • 备份:提供自动备份功能,减少数据丢失的风险。
  • 跨平台:许多版本控制系统可以在不同的操作系统上运行,如Windows、Linux和Mac OS。
  • 集成工具:可以与IDE(集成开发环境)、构建工具和持续集成/持续部署(CI/CD)系统等其他工具集成。
  • 权限管理:可以设置不同级别的访问权限,控制谁可以查看、修改或提交代码。

常见的版本控制系统

  • Git:一个分布式版本控制系统,是目前最流行的VCS之一。
  • Subversion(SVN):一个集中式版本控制系统,曾经非常流行。
  • Mercurial:另一个分布式版本控制系统,与Git类似但有不同的设计理念。
  • CVS:一个较老的集中式版本控制系统。
git教程