当前位置: 首页 > news >正文

在命令行中编译cpp文件

在命令行中编译cpp文件

查看g++版本信息

g++--version

最常用命令, 用于确认编译器是否安装以及其型号

我的电脑g++输出

C:\Users\bushuo>g++ --version g++ (x86_64-win32-seh-rev1, Built by MinGW-Builds project) 14.2.0 Copyright (C) 2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

核心版本标识

上段信息输出内容非常详细, 不仅输出版本号, 还透露了编译器架构、线程模式、异常处理机制以及构建来源.

  1. x86_64(架构), 表示为64位的编译器, 生成的.exe程序只能在64位的Windows系统上运行, 无法生成32位程序;

  2. win32(线程模式), 表示该编译器使用Win32API来实现C++的多线程功能, 另一种常见的模式是posix;

    • win32模型在Windows上原生支持最好, 不需要额外的兼容层, 对于绝大多数日常开发, win32是MinGW在Windwos上的默认且推荐选择.
  3. seh (异常处理机制), 代表 Structured Exception Handling (SEH), 是 Windows 原生的异常处理机制

  4. rev1 (修订版本)

    • 这是 MinGW-Builds 项目对该特定 GCC 版本打包的第 1 次修订
    • GCC 官方发布源码后,MinGW 社区会将其移植到 Windows 并打包
    • 如果打包过程中发现了小问题并修复,版本号会变成 rev2, rev3
  5. Built by MinGW-Builds project (构建来源)

  • 表明编译器不是直接从GNU官网下载的源码编译的, 也不是通过 choco 或 winget 安装的官方二进制包, 而是由 MinGW-Builds (一个知名的第三方社区项目, 通常在 SourceForge 上发布) 编译和分发的
  1. 14.2.0 (GCC 版本号)
  • 是 GCC (GNU Compiler Collection) 的核心版本
  • GCC 14.2.0 是 2024 年下半年发布的版本

版权与声明部分

Copyright (C) 2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 【中文】 这是标准的 GNU 自由软件版权声明 版权所有 (C) 2024 自由软件基金会 本软件为自由软件;有关复制条件, 请查阅源代码; 本软件不提供任何担保, 甚至不包含适销性或特定用途适用性的默示担保.
  1. 这是标准的 GNU GPL 开源协议声明
  2. NO warranty:意思是软件按’原样’提供, 如果编译器把你的代码编译错了导致损失, 作者不承担法律责任(这是开源软件的通用免责条款)

命令行中的两个–与一个-

在命令行(CLI)中, --(两个连字符)和 -(一个连字符)有着严格的区别, 这是由 GNU 命令行参数约定(GNU Command Line Conventions)定义的

- (单横线)

  1. 短选项 (Short Option)
  2. 后接单个字母, 通常用于常用功能, 可以合并书写;
示例
  1. -v(verbose);
  2. -o(output);
  3. -Wall

– (双横线)

  1. 长选项 (Long Option)
  2. 后接完整的单词或短语, 通常用于更清晰、更具体的功能, 不可合并;
示例
  1. --version;
  2. --help;
  3. --std=c++17

查看编译器的详细配置信息

g++-v
C:\Users\bushuo>g++ -v Using built-in specs. COLLECT_GCC=g++ COLLECT_LTO_WRAPPER=D:/MinGW/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/14.2.0/lto-wrapper.exe Target: x86_64-w64-mingw32 Configured with: ../../../src/gcc-14.2.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/buildroot/x86_64-1420-win32-seh-ucrt-rt_v12-rev1/mingw64 --enable-host-shared --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=win32 --enable-libstdcxx-threads=yes --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --enable-libstdcxx-filesystem-ts=yes --disable-libssp --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/buildroot/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/buildroot/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/buildroot/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/buildroot/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-win32-seh-rev1, Built by MinGW-Builds project' --with-bugurl=https://github.com/niXman/mingw-builds LD_FOR_TARGET=/c/buildroot/x86_64-1420-win32-seh-ucrt-rt_v12-rev1/mingw64/bin/ld.exe --with-boot-ldflags='-pipe -fno-ident -L/c/buildroot/x86_64-1420-win32-seh-ucrt-rt_v12-rev1/mingw64/opt/lib -L/c/buildroot/prerequisites/x86_64-zlib-static/lib -L/c/buildroot/prerequisites/x86_64-w64-mingw32-static/lib -Wl,--disable-dynamicbase -static-libstdc++ -static-libgcc' Thread model: win32 Supported LTO compression algorithms: zlib gcc version 14.2.0 (x86_64-win32-seh-rev1, Built by MinGW-Builds project)

输出包含的关键信息

  1. Target: 目标架构(如 x86_64-linux-gnu)
  2. Configured with: 编译该编译器时使用的配置参数
  3. Thread model: 线程模型(如 posix)
  4. Supported LTO compression algorithms: 支持的压缩算法.

查看编译器过程中的详细调用

g++-v-cc++-E/dev/null
C:\Users\bushuo>g++ -v -c c++ -E /dev/null Using built-in specs. COLLECT_GCC=g++ Target: x86_64-w64-mingw32 Configured with: ../../../src/gcc-14.2.0/configure --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --prefix=/mingw64 --with-sysroot=/c/buildroot/x86_64-1420-win32-seh-ucrt-rt_v12-rev1/mingw64 --enable-host-shared --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-time=yes --enable-threads=win32 --enable-libstdcxx-threads=yes --enable-libgomp --enable-libatomic --enable-lto --enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable-version-specific-runtime-libs --enable-libstdcxx-filesystem-ts=yes --disable-libssp --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu-ld --with-arch=nocona --with-tune=core2 --with-libiconv --with-system-zlib --with-gmp=/c/buildroot/prerequisites/x86_64-w64-mingw32-static --with-mpfr=/c/buildroot/prerequisites/x86_64-w64-mingw32-static --with-mpc=/c/buildroot/prerequisites/x86_64-w64-mingw32-static --with-isl=/c/buildroot/prerequisites/x86_64-w64-mingw32-static --with-pkgversion='x86_64-win32-seh-rev1, Built by MinGW-Builds project' --with-bugurl=https://github.com/niXman/mingw-builds LD_FOR_TARGET=/c/buildroot/x86_64-1420-win32-seh-ucrt-rt_v12-rev1/mingw64/bin/ld.exe --with-boot-ldflags='-pipe -fno-ident -L/c/buildroot/x86_64-1420-win32-seh-ucrt-rt_v12-rev1/mingw64/opt/lib -L/c/buildroot/prerequisites/x86_64-zlib-static/lib -L/c/buildroot/prerequisites/x86_64-w64-mingw32-static/lib -Wl,--disable-dynamicbase -static-libstdc++ -static-libgcc' Thread model: win32 Supported LTO compression algorithms: zlib gcc version 14.2.0 (x86_64-win32-seh-rev1, Built by MinGW-Builds project) COMPILER_PATH=D:/MinGW/mingw64/bin/../libexec/gcc/x86_64-w64-mingw32/14.2.0/;D:/MinGW/mingw64/bin/../libexec/gcc/;D:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/bin/ LIBRARY_PATH=D:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/;D:/MinGW/mingw64/bin/../lib/gcc/;D:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/lib/../lib/;D:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../lib/;D:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../../x86_64-w64-mingw32/lib/;D:/MinGW/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/14.2.0/../../../ COLLECT_GCC_OPTIONS='-v' '-c' '-E' '-shared-libgcc' '-mtune=core2' '-march=nocona' g++: warning: c++: linker input file unused because linking not done g++: error: c++: linker input file not found: No such file or directory g++: warning: /dev/null: linker input file unused because linking not done g++: error: /dev/null: linker input file not found: No such file or directory
  1. -v: 显示详细过程;
  2. -x c++: 强制指定语言为 C++;
  3. -E: 只进行预处理, 不编译;
  4. /dev/null: 空输入文件.

在命令行编译 C++ 文件的命令

基础编译(最常用)

main.cpp编译为可执行文件main.exe(Windows).

g++ main.cpp-omain
  1. main.cpp: 源代码文件;
  2. -o main: 指定输出文件名为 main, 如果不加 -o, Linux/Mac 默认生成a.out, Windows 默认生成a.exe.

进阶编译(推荐用于实际开发)

g++-std=c++17-Wall-Wextra-O2main.cpp-omain
  1. -std=c++11 / c++14 / c++17 / c++20, 指定 C++ 语言标准版本, 避免不同编译器默认标准不同导致报错;
  2. -Wall, 开启大部分常用警告 (Warning All), 帮助发现潜在逻辑错误;
  3. -Wextra, 开启额外的警告;
  4. -O2, 开启二级优化 (Optimize), 发布版本使用, 调试时可改为 -O0 或 -g;
  5. -g, 生成调试信息 (Debug), 如果需要用 gdb 调试, 必须加此参数(通常会关闭优化 -O0);
  6. -I/path/to/include, 添加额外的头文件搜索路径, 当你的头文件不在标准路径时使用;
  7. -L/path/to/lib, 添加额外的库文件搜索路径, 链接外部库时使用;
  8. -lLibraryName, 链接指定的库,

多文件编译

A: 一次性编译所有文件(适合小项目)
g++-std=c++17-Wallmain.cpp utils.cpp student.cpp-omy_program
B: 分步编译(适合大项目, 先编译成 .o 对象文件, 再链接)
# 1. 编译成对象文件 (.o)g++-c-std=c++17 main.cpp-omain.o g++-c-std=c++17 utils.cpp-outils.o# 2. 链接对象文件生成可执行文件g++ main.o utils.o-omy_program
http://www.jsqmd.com/news/482805/

相关文章:

  • CAN总线节能秘籍:用TJA1145实现智能部分网络(Partial Networking)配置
  • 【毕设】基于STM32F103C8T6与MAX30102的心率血氧手表设计与实现
  • 使用DAMOYOLO-S与AI Agent构建自动化内容审核系统
  • Audio Pixel StudioGPU算力适配:Jetson Nano边缘设备部署可行性验证
  • jEasyUI 树形菜单加载父/子节点详解
  • 避开溶出曲线查询的5个坑:从FDA到日本蓝皮书的实战经验分享
  • 深入解析 tzst:一个基于 Zstandard 的现代 Python 归档库
  • DDU显卡驱动深度清理技术指南:从故障诊断到系统优化
  • 革新Mod管理体验:KKManager全攻略——从混乱到秩序的开源解决方案
  • 2026年03月15日 星期日 22:44:23 +0800
  • CTF实战:利用JWT弱密钥漏洞攻防解析
  • 3步构建个人健康数据自动化系统:Zepp Life同步工具全指南
  • Gofile下载工具深度实践指南:从问题解决到效能优化
  • 魔兽争霸III开源优化工具链:跨平台性能调优完全指南
  • 智能客服系统对接实战:从架构设计到生产环境避坑指南
  • 【实证分析】上市公司企业可持续发展绩效数据-含代码(2009-2023年)
  • Unlocker开源工具:VMware虚拟机macOS支持的完整解决方案
  • 从手动到自动:批量字符替换工具如何革新文本处理
  • 魔兽争霸III Windows 11兼容性终极解决方案:从问题诊断到性能优化完整指南
  • 魔兽争霸III性能优化解决方案:突破现代系统兼容性瓶颈
  • 零基础教程:造相Z-Image文生图模型v2,手把手教你一键生成高清图片
  • 轻量级指令模型Granite-4.0-H-350m:Ollama快速部署,支持多语言任务
  • 独角发卡2.0.6魔改实战:如何用hyper模板打造个性化发卡系统(附避坑指南)
  • 庐山派K230开发板简介:国产RISC-V AIoT核心板硬件与生态初探
  • 3个革命性步骤:video-subtitle-extractor让硬字幕提取效率提升10倍
  • SMUDebugTool实战指南:从故障排查到性能调优的进阶之路
  • 平台介绍与核心价值
  • 冥想第一千八百二十三天(1823)
  • 插件管理新范式:ComfyUI-Manager的环境一致性解决方案
  • VS2022+OpenEuler跨平台开发实战:如何正确配置Linux头文件路径避免#include报错