目录
cmake_minimum_required - 指定cmake的最小版本要求
include_directories - 向工程添加多个特定库文件搜索路径
link_directories - 向工程添加多个特定库文件搜索路径
target_link_libraries - 为目标添加需要链接的共享库
aux_source_directory - 发现一个目录下所有的源代码文件并将列表存储在一个变量中这个指令常被临时用来自动构建源文件列表
一、 开发环境搭建
操作系统:Ubuntu64位
1.安装GCC,GDB
执行一下指令安装编译器和调试器:
sudo apt update // apt相当于手机中的应用市场
sudo apt install build-essetial gdb
安装成功确认:
gcc --version
g++ --version
gdb --version
//如果成功,则显示版本号
2.安装CMake
指令:
sudo apt install cmake
安装成功确认:
cmake --version
操作系统:CentOS、Alibaba
1.安装GCC,GDB
yum -y install gcc
yum -y install gcc-c++
yum install gdb
安装成功确认:
gcc --version
g++ --version
gdb --version
//如果成功,则显示版本号
二、 GCC编译器
1. 编译过程
第一步:预处理
将源代码的.c 、.cpp 、.h 等文件包含到一个文件中,预处理结束之后对于c语言编译器会生成一个.i 文件。C++会生成.ii文件。
第二步:编译
编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件。
第三步:汇编
汇编器是将汇编代码转变成机器可以执行的命令。
第四步:链接
将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件。
2. 编译一个cpp文件并执行
g++ test.cpp -O test2
./ test2
3. G++的重要编译参数
-g
作用:高数GCC产生能被 GNU 调试器GDB使用的信息,以便调试程序。
使用:
g++ -g test.cpp -o test
-o
种类:
- -O 主要进行跳转和延迟退栈两种优化;
- -O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等。
- -O3 则包括循环展开和其他一些与处理特性相关的优化工作。
- 选项将使编译的速度比使用 -O 时慢, 但通常产生的代码执行速度会更快。
作用:告诉 GCC 对源代码进行基本优化告诉 GCC 对源代码进行基本优化。
使用:
g++ -o2 test.cpp -o test
-I
作用:
用来指定头文件目录。/usr/include目录一般是不用指定的,gcc知道默认去/usr/include找,但 是如果头文件不在/usr/icnclude里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,那编译命令行就要加上-I/myinclude参数了,如果不加你会得到一个"xxxx.h: No such file or directory"的错误。
使用:
g++ -I/myinclude test.cpp
-Wall
作用:打印出gcc提供的警告信息
使用:
g++ -wall test.cpp
-std=c++11
作用:使用c++11标准编译
使用:
g++ -std=C++11 test.cpp
-o
作用:指定输出文件名,不加参数默认生成a.out文件
使用:
三、 GDB调试器
首先要生成可调试的可执行文件,加 -g 参数。
开始调试:
gdb xxx
清屏:
shell clear
加断点、查看所有断点信息
b 行数
info break == i b
显示代码信息
* list :显示程序中的代码,常用使用格式有:
list
输出从上次调用list命令开始往后的10行程序代码。
list -
输出从上次调用list命令开始往前的10行程序代码。
list n
输出第n行附近的10行程序代码。
list function
输出函数function前后的10行程序代码。
打印变量信息:
p
GDB常用命令大全 GDB 命令详细解释_Rolei_kezhu的博客-CSDN博客_gdb命令
三、linux下vscode的使用
1. 安装
在应用商店搜索vscode安装即可。
2.使用
打开终端执行相应命令即可
3.快捷键
- F11键:全屏操
- 分屏: ctrl + \
- 打开终端:ctrl + ·
- 格式化代码:Ctrl + shift + I
- 批量重新名:F2
- 移动行数:alt+ 箭头
- 全局搜索: 【放大镜】图标
四、 cmake的使用
1. 介绍:
当多个人用不同的语言或编译器开发一个项目,最终要输出一个可执行文件或共享库(dll等等),这时候cmake神器就出现了。跨平台!!!
2. 语法特性:
基本语法格式:指令(参数1 参数2…)
- 参数使用括号括起
- 参数之间使用空格或分号分开
指令是大小写无关的,参数和变量是大小写相关的
set(Hello hello.cpp)
add_executable(hello main.cpp hello.cpp)
ADD_EXECUTABLE(hello main.cpp ${HELLO})
变量使用${}
方式取址,但是在IF
控制语句中是直接使用变量名
3.重要指令
cmake_minimum_required - 指定cmake的最小版本要求
语法:
camke_minimum_required(VERSION versionNumber [FATAL_ERROR])
示例:
cmake_minimum_required(VERSION 3.21.1)
project - 定义工程名称,并可指定工程支持度的语言
语法:
project(projectName[CXX][C][JAVA])
示例:
project(helloWorld)
set - 显示定义变量
语法:
set(VAR [VALUE] [CACHE TYPE DECSTRING [FORCE]])
示例:
#定义变量 SRC ,其值为 hello.c main.c
set(SRC hello.c main.c)
include_directories - 向工程添加多个特定库文件搜索路径
语法:
include_directories([AFTER|BEFORE] [SYSTEM] dir1 dir2)
示例:
# 相当于指定编译器的 -I 参数
# 路径可以是绝对和相对路径
include_directories(./inc ./include)
link_directories - 向工程添加多个特定库文件搜索路径
语法:
link_directories(dir1 dir2 …)
示例:
# 将 ./lib 文件添加到库文件搜索路径
link_directories(./lib)
add_library - 生成库文件
语法:
add_library(libName [SHARED | STATIC | MODULE | EXCLUDE_FROM_ALL] source1 source2 …)
示例:
# 通过变量 SRC 生成 libhello.so 共享库
add_library(hello SHARED ${SRC})
add_compile_options - 添加编译参数
语法:
add_compile_options( option …)
示例:
# 添加编译参数 -Wall -std=c++11 -o2
add_compile_options(-Wall -std=c++11 -O2)
add_executable - 生成可执行文件
语法:
add_executable(exename source1 source2 …)
示例:
# 编译 main.cpp 生成 main 的可执行文件
add_executable(mian mian.cpp)
target_link_libraries - 为目标添加需要链接的共享库
语法:
arget_link_libraries(target library1<debug | optimized> library2 …)
示例:
# 将 hello 动态文件链接到可执行文件 main
target_link_libraries(main hello)
向当前工程添加存放源文件的子目录
可以指定中间二进制和目标二进制存放的位置
语法:
add_subdirectory(source_dir [binaryDir] [EXCLUDE_FROM_ALL])
示例:
# 添加src子目录,注:src 中需要有一个 CMakeLists.txt 文件
add_subdirectory(src)
aux_source_directory - 发现一个目录下所有的源代码文件并将列表存储在一个变量中
这个指令常被临时用来自动构建源文件列表
语法:
aux_source_directory(dir VARIABLE)
例子:
定义 SRC 变量,其值为当前目录下所有源代码文件aux_source_directory(. SRC)
编译 SRC 变量所代表的源代码文件,生成 main 可执行文件
add_executable(main ${SRC})
五. 开发方式
目前了解到的有几种:
- Visual Studio 连接远程linux服务器开发
- 桌面版linux 利用vscode开发
VS连接服务器Ubuntu:
检查服务器ssh状态:
systemctl status sshd
杀死某一个进程:
sudo kill -9 xxx //xxx为进程号
安装ssh:
sudo apt install openssh-server