LinuxC++环境搭建与简单使用

-
-
2026-05-16 13:16
操作系统:Ubuntu 24.04 .4 LTS

一、编译器和调试器的安装与使用

1. 安装GCC、GDB

apt install build-essential gdb

2. 安装结果确认

gcc --version
g++ --version
gdb --version

若输出对应版本号,则安装成功。

3. 编译程序

以下四步实际上用一行即可执行,即:

g++ hello_world.cpp -o hello_world

这里拆开仅为了了解编译过程。

(1)预处理

g++ -E hello_world.cpp -o hello_world.i

(2)编译

g++ -S hello_world.i -o hello_world.s /// 生成汇编语言文件

(3)汇编

g++ -c hello_world.ss -o hello_world.o

(4)链接

g++ hello_world.o -o hello_world

4. g++重要编译参数

参数作用示例
-g编译带调试信息的可执行文件g++ -g hello_world.cpp -o hello_world
-O[n]优化源代码,n为0~3,常用2g++ -O2 hello_world.cpp -o hello_world
-l和-L

指定库文件和指定库文件路径。

-l链接的是/lib、/usr/lib、/usr/local/lib下的库,其他路径的库需要用-L指定路径。

注意:参数后直接接上库路径或者库名,不需要空格,-L指定的是库所在目录,不是库全路径,还需要加上-l才行。

g++ -L/home/test/folder -lmydll hello_world.cpp
-I指定头文件搜索目录 
-Wall打印警告信息g++ -Wall hello_world.cpp
-w关闭警告信息 
-std=c++11设置编译标准g++ -std=c++11 hello_world.cpp
-o指定输出文件名,不加该参数,会输出a.out 
-D宏定义 

Linux下简单测量程序执行时间:time ./hello_world,即可看见执行程序花费的时间。

  • 多文件编译示例

    g++ a.cpp /path/b.cpp xxx -I/includePath

5. GDB调试器

调试开始:执行gdb [exefilename],进入gdb调试程序,exefilename为要调试的可执行文件名。

Tips:

  • 编译程序时需要加-g才可以用gdb调试:gcc -g main.c -o main
  • 按回车键可重复执行上一条命令。
命令快捷键作用
$(gdb)helph查看帮助
$(gdb)runr重新开始运行文件(run-text:加载文本文件,run-bin:加载二进制文件)
$(gdb)start 单步执行程序
$(gdb)listl查看源代码(list-n:从第n行开始查看代码,list+函数名:查看具体函数)
$(gdb)set 设置变量的值
$(gdb)nextn单步调试(逐过程调试,类似Visual Studio的F10)
$(gdb)steps单步调试(逐语句调试,类似Visual Studio的F11)
$(gdb)backtracebt查看函数的调用的栈帧和层级关系
$(gdb)franef切换函数的栈帧
$(gdb)infoi查看函数内部局部变量的数值
$(gdb)finish 结束当前函数,返回函数调用点(类似Visual Studio在函数内部执行:Shift + F11,跳回上级)
$(gdb)continuec继续执行
$(gdb)printp打印值及地址
$(gdb)quitq退出gdb
$(gdb)break+numb在第num行设置断点
$(gdb)delete numd取消第num个断点(注意:是断点的编号,不是代码的行数)
$(gdb)Info breakpoints 查看当前设置的所有断点
$(gdb)display 追踪查看具体变量数值(类似Visual Studio的添加监视)
$(gdb)undisplay 取消追踪观察变量
$(gdb)i watch 显示观察点
$(gdb)enable breakpoints 启用断点
$(gdb)disable breakpoints 禁用断点
$(gdb)x 查看内存x/20xw显示20个单元,十六进制,每单元四字节
$(gdb)run argv[1] argv[2] 调试时命令行传递参数
$(gdb)set follow-fork-mode child Makefile项目管理:选择跟踪父子进程

二、CMake安装与使用

apt install cmake

1. 语法特性

  • 基本语法格式:指令(参数1 参数2)
    • 参数使用括号包起来
    • 参数之间使用空格分号分隔
  • 指令与大小写无关,但是参数和变量与大小写相关

    set(HELLO hello.cpp)
    add_executable(hello main.cpp hello.cpp)
    ADD_EXECUTABLE(hello main.cpp ${HELLO})
  • 变量取值用:${},在if控制语句中则直接使用变量名:if(HELLO)

2. 重要指令

  • cmake_minimum_required 指定CMake的最小版本要求
    • 语法:cmake_minimum_required(VERSION versionNumber [FATAL_ERROR])

      cmake_minimum_required(VERSION 1.0.0)
  • project 定义工程名称,并且可以指定工程支持的语言
    • 语法:project(projectname [CXX] [C] [Java])

      project(HELLOWORLD)
  • set 显示定义变量
    • 语法:set(VAR [VALUE] [CACHE TYPE DOCSTRING] [FORCE])

      set(SRC sayHello.cpp hello.cpp)
  • include_directories 向工程添加多个特定的头文件搜索路径
    • 语法:include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2 …)

      include_directories(/usr/lib/mylib ./lib) 
  • link_directories 向工程添加多个特定的库文件搜索路径
    • 语法:link_directories(dir1 dir2 …)

      link_directories(/usr/lib/mylib ./lib) 
  • add_library 生成库文件
    • 语法:add_library(libname [SHARED|STATIC|MODULE] [EXCLUDE_FROM_ALL] source1 source2 …)

      add_library(hello SHARED ${SRC})
  • add_compile_options 添加编译参数
    • 语法:add_compile_options(<option> …)

      add_compile_options(-Wall -std=c++11 -o2)
  • add_executable 生成可执行文件
    • 语法:add_executable(exename source1 source2 …)

      add_executable(main main.cpp)
  • target_link_librariestarget添加需要链接的共享库
    • 语法:target_link_libraries(target library1<debug|optimized> library2…)

      target_link_libraries(main hello) # 将hello动态库文件链接到可执行文件main
  • add_subdirectory 向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置
    • 语法:add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL1])

      add_subdirectory(src)
  • aux_source_directory 发现一个目录下所有的源代码文件并将列表存储在一个变量中,这个指令临时被用来自动构件源文件列表
    • 语法:aux_source_directory(dir VARIABLE)

      aux_source_directory(. SRC)
      aux_source_directory(main ${SRC})

3. CMake常用变量

  • CMAKE_C_FLAGS gcc编译选项
  • CMAKE_CXX_FLAGS g++编译选项
  • CMAKE_BUILD_TYPE 编译类型(Debug,Release)

三、VS Code安装必备插件

  • C/C++
  • CMake
  • CMake Tools


目录