- 指令格式
- 命令(空格)【选项】(空格)【操作对象】
- 选项和操作对象都可以没有,也可以是多个
- pwd:打印当前终端所在的目录
- ls:列出当前工作目录下的所有文件/文件夹名称
- ls
- ls 【路径】:列出指定路径下的
- ls 【选项】【路径】:列出指定路径下的,并以指定的格式显示
- cd:切换当前的工作目录
- cd~/cd
- cd 【相对路径】
- cd 【绝对路径】
- mkdir:创建目录
- mkdir 路径
- mkdir -p 路径:一次性创建多层不存在的目录
- mkdir 路径1 【路径2】 【路径3】:一次性创建多个目录
- touch:创建新文件
- touch 【路径】
- touch 【路径1】 【路径2】
- rm:删除文件/目录
- rm 【选项】需要移除的文件路径
- rm 【选项】需要移除的目录
- -rf
- cp:复制文件/文件夹到指定路径
- cp 【被复制的文件路径】 【文件被复制的路径】
- cp -r 【被复制的文件路径】 【文件被复制的路径】
- -r:递归复制
- mv:移动文件到新位置,或重命名文件
- man:查看命令使用手册
- reboot:重启Linux系统
- shutdown:关机
- Vim
- 输出:按住“i”
- 保存:Esc+Shift+“w”
- 退出:Esc+Shift+“q”
- gedit
- nano
- 输入:ctrl+O
- 退出:ctrl+X
VSCode是通过调用GCC编译器来实现C++的编译工作的
使用g++指令来编译C++代码
2.1编译过程- 传统操作
- 1预处理——生成.i文件
-
g++ -E test.cpp -o test.i
-
- 2编译——生成.s文件
-
g++ -S test.i -o test.s
-
- 3汇编——生成.o文件
-
g++ -c test.s -o test.o
-
- 4 链接——生成bin文件
-
g++ test.o -o test
-
- 1预处理——生成.i文件
- 一步到位操作
-
g++ test.cpp -o test
-
- -g:编译待调试信息的可执行文件
- -O:优化源代码
- -O2:优化源代码,并输出可执行文件
- time:查看文件的运行时间
- -l/-L:指定库文件/库文件路径
- l:用来指定程序要链接的库,-l紧接着就是库名
- L:指定库文件所在目录,-L紧接着是库文件的目录名
- -I(大写i):指定头文件搜索目录
- -Wall:打印警告信息
- -w:关闭警告信息
- -std=c++11:设置编译标准
- -o:指定输出文件名
- -D:定义宏
2.3.1直接编译
- 简单编译并运行
-
g++ main.cpp src/swap.cpp -Iinclude ./a.out
-
- 增加参数编译并运行
-
g++ main.cpp src/swap.cc -Iinclude -std=c++11 -O2 -Wall -o b.out ./b.out
-
2.3.2生成库文件并编译
- 链接静态库生成可执行文件
-
//进入目录 cd src //汇编,生成swap.o文件 g++ swap.cpp -c -I../include //生成静态库libswap.a ar rs libswap.a swap.o //回到上级目录 cd .. //链接,生成可执行文件 g++ main.cpp -Iinclude -Lsrc -lswap -o staticmain //执行可执行文件 ./staticmain
-
- 链接动态库生成可执行文件
-
//进入目录 cd src //生成动态库 g++ swaop.cpp -I../include -fPIC -shared -o libswap.so //回到上级目录 cd .. //链接,生成可执行文件 g++ main.cpp -Iinclude -Lsrc -lswap -o sharemain //执行可执行文件 LD_LIBRARY_PATH=src ./sharemain
-
动态库与静态库的区别
- 所生成的可执行文件并不在一个目录下
VSCode是通过调用GDB调试器来实现C++的调试工作
GDB的功能
- 设置断点
- 使程序在指定的代码行上暂停执行
- 单步执行程序
Tips:
- 编译程序时需要加上-g,之后才能用gdb调试
- 回车键:重复上一命令
- gdb+可执行文件名:进入gdb调试工具
- 输入各种常用命令
- run
- break +num行:添加断点
- 退出:quit
- C/C++
- CMake
- CMake Tools
- 项目1:打印hello world
- 编写步骤
- 在终端中打开VSCode
- 新建文件夹、文件
- 编写代码
- 用g++进行代码调试
- 编写步骤
- 项目2:交换两个数(以类的形式)
- 两个文件夹、三个文件
- include——swap.h
-
#pragma once #include
class swap { public: swap(int a,int b) { this->_a=a; this->_b=b; } void run(); void printInfo(); private: int _a; int _b; };
-
- src——swap.capp
-
#include"swap.h" void swap::run() { int temp; temp = _a; _a = _b; _b = temp; } void swap::printInfo() { std::cout<<"_a = "<<_a <
-
- main.cpp
int main(int argc, char **argv) { swap myswap(10, 20); std::cout << "Before swap: " << std::endl; myswap.printInfo(); myswap.run(); std::cout << "After swap: " << std::endl; myswap.printInfo(); return 0; }
- 进行调试
g++ main.cpp src/swap.cpp -Iinclude -o main
- 基本语法格式:指令(参数1 参数2 ....)
- 参数使用括弧括起
- 参数之间使用空格或分号
- 指令是大小写无关,参数和变量是大小写相关的
- 变量使用${}方式取值,但在IF控制语句中是直接使用变量名
重要指令
- cmake_minimum_required:指定CMake的最小版本要求
- project:定义工程名称
- set:显式的定义变量
- include_directories:向工程添加多个特定的头文件搜索路径
- 相当于g++编译器的-I
- link_directories:向工程添加多个特定的库文件搜索路径
- 相当于g++编译器的-L
- add_library:生成库文件
- add_compile_options:添加编译参数
- add_executable:生成可执行文件
- target_link_libraries:为target添加需要链接的共享库
- 相当于g++编译器的-I
- add_subdirectory:向当前工程添加存放源文件的子目录
- aux_source_directory:发现一个目录下的所有源代码文件并将列表存储在一个变量中
CMake常用变量
- CMAKE_C_FLAGS:gcc编译选项
- CMAKE_CXX_FLAGS:g++编译选项
- CMKAE_BUILD_TYPE:编译类型
5.4.1编译流程
- 手动编写CMakelists.txt
- 执行命令cmake PATH 生成Makefile
- 执行命令make 进行编译
5.4.2两种构建方式
- 内部构建:在同级目录下产生一大堆中间文件
//在当前目录下,编译本目录的CMakelists.txt. 生成Makefile和其他文件 cmake . //执行make命令,生成target make
- 外部构建:将编译输出文件与源文件放到不同目录下
//在当前目录下,创建build文件夹 mkdir build //进入到build文件夹 cd build //编译上级目录的CMakelists.txt. 生成Makefile和其他文件 cmake .. //执行make命令,生成target make
项目1:输出hello world
- 创建CMakelists.txt文件
- 在CMakelists.txt中输入相应的指令
cmake_minimum_required(VERSION 3.0) project(HELLO) add_executable(hello_cmake main.cpp)
- 在终端中进行调试(一般使用外部构建)
mkdir build cd build cmake .. make
项目2:交换swap(多级目录)
区别:CMakelists.txt中的命令
cmake_minimum_required(VERSION 3.0) project(SWAP) include_directories(include) add_executable(SWAP_CMAKE main.cpp)



