C++编译构建

编译构建工具

MinGW简介

MinGW(Minimalist GNU for Windows) 是一个用于 Windows 平台的开发工具集,它提供了一组 GNU 工具和库,包括gcc、g++等,可以用于编译和构建本地的 Windows 应用程序。MinGW 的目标是在 Windows 环境下提供类似于 Unix/Linux 环境下的开发工具,使开发者能够轻松地在 Windows 上编写和编译 C、C++ 等程序。

GCC简介

GCC(GNU Compiler Collection)即GNU编译器套件,属于一种编程语言编译器,其原名为GCC(GNU C Compiler)即GNU c语言编译器,虽然缩写一样但是功能上区别很大。GCC的初衷是为GNU操作系统专门编写的一款编译器,原本的GNU是专用于编译C代码,现如今已扩展为可以编译C、C++、Java、Objective-C等多种编程语言的编译器集合了。

G++简介

G++是GCC的C++编译器部分,专门用于编译C++代码。与GCC相比,G++默认启用C++特性,比如支持C++标准库和面向对象编程。

GCC和G++的区别

 GNU Binutils简介

https://sourceware.org/binutils/

Make简介

Make 是一个构建自动化工具,用于根据代码文件的依赖关系来自动执行编译和构建任务。它通过Makefile文件定义哪些文件需要编译、如何编译,以及如何链接生成最终的可执行文件。

Ninja简介

Ninja 是一个超快速构建系统,专为处理大型项目和更复杂的依赖关系而设计,侧重于高效和并行构建。Ninja 诞生的目的是替代 Make,在执行速度和并行构建方面表现优异。

Make和Ninja的区别

Make适合小型和中型项目,以及那些需要简单构建过程的项目。Makefile 更加直观,易于手动编写和修改。

Ninja适合大型项目或需要频繁构建的项目,尤其是注重构建速度的项目。由于 Ninja 的配置文件复杂且不易手写,通常配合像 CMake 这样的工具使用。

Cmake简介

CMake 是一个高级的构建工具,用于生成适合各种平台的构建文件(如 Makefile、Ninja、Visual Studio 工程等)。CMake 的主要作用是为复杂项目生成构建系统,并解决跨平台构建的难题。

我的简单理解,一般使用cmake生成Makefile或Ninja构建文件,然后使用MakeNinja进行构建。

GCCMake区别

GCC 是一个编译器工具,用于将单个源文件编译成目标文件,并将目标文件链接为可执行文件。

Make 是一个自动化构建工具,通过调用 GCC 等编译器来完成编译和链接工作。它主要用于管理大型项目的依赖关系,自动化构建流程,避免手动执行多次编译命令。

工具安装

MinGW安装

MinGW工具官网:https://sourceforge.net/projects/mingw-w64/files/

# 工具下载链接在README.rst.old文件里
MinGW-W64 Online Installer
====================
* `MinGW-W64-install.exe <https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe>`_

MinGW-W64 GCC-8.1.0
====================
* `x86_64-posix-sjlj <https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/sjlj/x86_64-8.1.0-release-posix-sjlj-rt_v6-rev0.7z>`_
* `x86_64-posix-seh <https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z>`_
* `x86_64-win32-sjlj <https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-win32/sjlj/x86_64-8.1.0-release-win32-sjlj-rt_v6-rev0.7z>`_
* `x86_64-win32-seh <https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/8.1.0/threads-win32/seh/x86_64-8.1.0-release-win32-seh-rt_v6-rev0.7z>`_
* `i686-posix-sjlj <https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/8.1.0/threads-posix/sjlj/i686-8.1.0-release-posix-sjlj-rt_v6-rev0.7z>`_
* `i686-posix-dwarf <https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/8.1.0/threads-posix/dwarf/i686-8.1.0-release-posix-dwarf-rt_v6-rev0.7z>`_
* `i686-win32-sjlj <https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/8.1.0/threads-win32/sjlj/i686-8.1.0-release-win32-sjlj-rt_v6-rev0.7z>`_
* `i686-win32-dwarf <https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/8.1.0/threads-win32/dwarf/i686-8.1.0-release-win32-dwarf-rt_v6-rev0.7z>`_

解压后放到目录C:\Program Files\mingw64\bin,并将该目录添加到系统环境变量,打开cmd窗口执行gcc --version看到版本信息即说明安装完成。

路径C:\Program Files\mingw64\bin包含mingw32-make.exe文件,将其改名为make.exe文件,便于使用。

Cmake安装

Windows下CMake的下载与安装详解_cmake下载-优快云博客

Linux安装

使用apt进行安装

sudo apt install gcc

sudo apt install g++

C++代码编译构建

编译单个C++源文件

main.cpp代码如下:

#include <iostream>
using namespace std;

int main() {
    cout << "Hello, World!" << endl;
    return 0;
}

使用g++进行编译:

g++ -o main main.cpp

使用gcc进行编译:

gcc -o main main.cpp -lstdc++

注:使用gcc编译C++文件,需要显式链接C++标准库,否则会编译报错。

编译简单C++工程

C++工程源文件结构如下:

my_project/
├── main.cpp
└── MyClass.cpp
└── MyClass.h

使用g++进行编译:

g++ -o my_program main.cpp MyClass.cpp

使用Cmake构建复杂工程

对于复杂的C++工程,可以使用cmake和make进行构建。

示例项目源文件结构如下:

CppCmakeProject
├── application
│   ├── inc
│   │   └── function.h
│   └── src
│       ├── function.cpp
│       └── main.cpp
└── CMakeLists.txt

其中,./CMakeLists.txt内容如下:

# 设置最低的 CMake 版本
cmake_minimum_required(VERSION 3.10)
 
# 设置项目名称和版本
project(CppCmakeProject)
 
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
 
# 添加头文件搜索路径
include_directories(${CMAKE_SOURCE_DIR}/application/inc)
 
# 获取源文件列表(list)
file(GLOB_RECURSE SOURCE_LIST "${CMAKE_SOURCE_DIR}/application/*.cpp")
 
# 创建可执行文件
add_executable(main ${SOURCE_LIST})

编译构建步骤如下:

1. 在项目根目录下,创建一个构建目录(通常称为 `build`):

  1. mkdir build
    cd build

    2. 在构建的build目录中运行 CMake,指定上级目录作为源目录:

cmake ..

3. 使用 `make` 命令构建项目:

make

4. 构建完成后,可以运行生成的可执行文件:

./main

参考文献

MinGW-w64的安装详细步骤(c/c++的编译器gcc、g++的windows版,win10、win11真实可用)-优快云博客

MinGW-W64 下载、安装与配置(支持最新版的GCC,目前 GCC 13.2.0)-优快云博客

浅显易懂的GCC使用教程——初级篇_gcc -ddebug-优快云博客

GCC是什么? gcc与g++的区别 具体编译细节_gcc g++-优快云博客

GCC基本使用 - 知乎 (zhihu.com)

windows环境安装make命令-优快云博客

【Linux c++实战】手把手教你在linux上从零搭建c++项目,并详细介绍Cmake(C++|Cmake|Ubuntu)-优快云博客

关于项目编译工具ninja、make、cmake的区别与优劣_ninja make-优快云博客

一文读懂ninja构建系统 - 知乎 (zhihu.com)

Make 命令教程 - 阮一峰的网络日志 (ruanyifeng.com)

Linux下CMake简明教程_linux cmake-优快云博客

https://subingwen.cn/cmake/CMake-primer/

https://subingwen.cn/cmake/CMake-advanced/

如何使用CMake构建c++项目 - 知乎 (zhihu.com)

Visual Studio 中的 CMake 项目 | Microsoft Learn

Windows下CMake的下载与安装详解_cmake下载-优快云博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值