C++ 开发环境配置

C++ 开发环境配置

我们使用主流的开源软件来配置C++开发环境

  • vscode
  • cmake

以上均是跨平台的开源软件,也是最主流的开发环境

环境安装

linux需要安装以下软件

  • gcc
  • g++
  • cmake
  • gdb

可以使用以下命令安装

sudo apt install gcc g++ cmake gdb

在系统使用apt安装三方库之后还可以配合cmakefind_package使用三方库.
在windows上可以使用msys2
msys2官网
MSYS2 提供了许多最新版本的原生构建软件,例如 GCCMinGW-w64CPythonCMakeMesonOpenSSLFFmpegRustRuby 等,仅举几例。
查看电脑架构:

PS C:\Users\29051> [Environment]::GetEnvironmentVariable("PROCESSOR_ARCHITECTURE")
AMD64

AMD64即为x86_64.
下载x86_64版本的MSYS2然后后傻瓜式安装。打开UCRT64 shell.
官网如下介绍:
UCRT (Universal C Runtime) is a newer version which is also used by Microsoft Visual Studio by default. It should work and behave as if the code was compiled with MSVC.
安装开发环境

$ pacman -S mingw-w64-ucrt-x86_64-gcc
$ pacman -S mingw-w64-ucrt-x86_64-g++
$ pacman -S mingw-w64-ucrt-x86_64-gdb
$ pacman -S mingw-w64-ucrt-x86_64-cmake
$ pacman -S mingw-w64-ucrt-x86_64-python3
# 查看版本
$ gcc --version
gcc.exe (Rev8, Built by MSYS2 project) 15.1.0
$ g++ --version
g++.exe (Rev8, Built by MSYS2 project) 15.1.0

使用msys2可以方便升级、卸载、集成各种库。集成库可以配置cmakefind_package使用三方库.
记得安装的命令都以mingw-w64-ucrt-x86_64开头,不要安装错误。写错的话,会被安装在其他地方。
常用命令

# 更新已安装的软件包
$ pacman -Syu
# 安装更新软件包
$ pacman -S mingw-w64-ucrt-x86_64-gcc
# 卸载软件包
$ pacman -R mingw-w64-ucrt-x86_64-gcc
# 搜索软件包
$ pacman -Ss mingw-w64-ucrt-x86_64-gcc
  • -S: -Sync 代表安装、更新。
  • y: 代表刷新(refresh) 软件包数据库。
  • u: upgrade更新已安装的软件包。
  • s: search搜索数据包
  • -R: -Remove 代表移除。

基础环境搭建

ctrl + shift + A选择Cmake: Quick Start,一步一步开始创建项目,等到最后一步:
image
这一步不要管按Esc退出,新项目就创建好了。

写第一个Hello World

创建如下项目机构:
image
配置CmakeLists.txt

cmake_minimum_required(VERSION 3.10.0)
project(learn01 VERSION 0.1.0 LANGUAGES C CXX)

# ✅ 设置 C++ 标准
set(CMAKE_CXX_STANDARD 26)  # 使用 C++26 标准
set(CMAKE_CXX_STANDARD_REQUIRED ON)  # 强制使用指定标准
set(CMAKE_CXX_EXTENSIONS OFF)        # 禁用编译器扩展(使用纯标准)


# 如果是单配置生成器(Makefile/Ninja),在未指定时默认使用 Release
if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
  message(STATUS "No build type specified, default to Release")
  set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build type" FORCE)
endif()

# 查找源文件
file(GLOB_RECURSE SOURCES CONFIGURE_DEPENDS
        "src/*.cpp"
        "src/*.c"
)

add_executable(learn01 main.cpp ${SOURCES})

# 设置头文件包含路径 
target_include_directories(${CMAKE_PROJECT_NAME}
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/learn01
    PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include/learn02
)

# —— 为目标按配置设置编译选项 —— 
# Release: -O2 (GCC/Clang) 或 /O2 (MSVC),并加上 -DNDEBUG
# Debug: 指定更合适的 Debug 标志
if (MSVC)
    message(STATUS "Using MSVC compiler settings")
    target_compile_options(learn01 PRIVATE
        $<$<CONFIG:Release>:/O3 /DNDEBUG>
        $<$<CONFIG:Debug>:/Od /Zi>
    )
else()
    message(STATUS "Using GCC/Clang compiler settings")
    target_compile_options(learn01 PRIVATE
        $<$<CONFIG:Release>:-O3 -DNDEBUG> // 1
        $<$<CONFIG:Debug>:-Og -g>
    )
endif()

# 可选:对 Release 开启跨模块优化(LTO),如果编译器/链接器支持
set(CMAKE_INTERPROCEDURAL_OPTIMIZATION_RELEASE ON)

include(CTest)
enable_testing()

set(CPACK_PROJECT_NAME ${PROJECT_NAME})
set(CPACK_PROJECT_VERSION ${PROJECT_VERSION})
include(CPack)

由代码1处可知:
区分是否是release环境

#ifdef NDEBUG
    std::cout << "Release build (optimizations likely enabled)\n";
#else
    std::cout << "Debug build\n";
#endif

learn01.hpp

#ifndef LEARN01_HPP
#define LEARN01_HPP

#include <iostream>
#include <string>
#include <vector>
#include <coroutine>
#include <exception>
#include <thread>
#include <chrono>
#include <future>
#include <vector>
#include <queue>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <memory>
#include <format>
#include <istream>
#include <fstream>


namespace learn01{
    void learn02();
    void learn01();
}

#endif // LEARN01_HPP

learn01.cpp

#include "learn01.hpp"
namespace learn01{
    void learn02(){
        std::cout << "hello World\n";
    }
}

main.cpp

#include <learn01.hpp>

int main(int, char**){
    learn01::learn02();
}

运行Hello World成功.
编译release
配置用户环境变量:
image
在项目根目录执行

cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
ninja -C build -v

cmake

  • -S: 指定源码目录
  • -B: 指定构建目录
  • -D: 代表替换CmakeLists.txt的变量

ninja

  • -C: 代表编译目录,选项用于指定 Ninja 的工作目录(Change directory),寻找build.ninja文件。
  • -v: verbose代表详细输出日志.

有什么不足还请大家指出,如果对C++感兴趣,欢迎加入群聊,专门来学习沟通C++.

posted @ 2025-09-06 15:20  爱情丶眨眼而去  阅读(38)  评论(0)    收藏  举报