【编译】gcc make cmake Makefile CMakeList.txt 关系、使用
·
文章目录
一 关系
1 gcc
是一种编译器。将源代码转为可执行文件。
当你的程序只有一个源文件时,直接就可以用gcc命令编译它。但当你的程序包含很多个源文件时,用gcc命令逐个去编译时,你就很容易混乱而且工作量大,所以出现了make工具。
2 make
是一个批处理工具。在整个项目中管理编译过程。其依据是makefile文件。
3 makefile
是一个文本文件,用于指挥make。其中包含一系列规则和命令。make 工具通过读取 makefile 中的规则来确定需要重新编译哪些文件,以及执行哪些命令来完成编译过程。
makefile在一些简单的工程完全可以用人工手写,但是当工程非常大的时候,手写makefile也是非常麻烦的,并且如果换了个平台makefile又要重新修改。这时候就出现了Cmake工具。
4 cmake
是一个跨平台构建工具。cmake可以更加简单的生成makefile文件给make用。
5 cmakelist
是一个文本文件,用于指挥cmake。
参考网址:http://t.csdn.cn/iNMcN
二 gcc
安装:
sudo apt update
sudo apt install build-essential gdb
2.1 编译过程
- 预处理 -E .i 展开宏
- 编译 -S .s c->汇编
- 汇编 -c .o 汇编->二进制
- 链接 -o bin文件
2.2 编译参数
1 -g 带调试信息
2 -O2 优化源代码
3 -l -L 指定库文件 | 指定库文件路径
4 -I 指定头文件搜索目录
5 -Wall 打印警告信息
6 -w 关闭警告信息
7 -std=c++11 设置编译标准
8 -o 指定输出文件名
9 -D 定义宏
2.3 静态库和动态库
1 后缀名
- 静态库后缀名:
.a
- 动态库后缀名:
.so
2 联系与区别
- 静态库在编译时被链接到目标程序中,成为程序的一部分。优点是可执行文件运行时不依赖外部库。缺点是文件较大。
- 动态库不会被复制到最终的可执行文件中,节省内存,兼容性问题。
2.4 GDB 调试器
-
安装
sudo apt update sudo apt install build-essential gdb
-
编译时需要带-g
gcc -g main.c -o main
1 常用命令
三 make、makefile
四 cmake、cmakelist
4.1 语法特性
4.2 重要命令
# CMake最小版本要求为2.8.3
cmake_minimum_required(VERSION 2.8.3)
# 指定工程名为HELLOWORLD
project(HELLOWORLD)
# 定义SRC变量,其值为sayhello.cpp hello.cpp
set(SRC sayhello.cpp hello.cpp)
# 将/usr/include/myincludefolder 和 ./include 添加到头文件搜索路径
include_directories(/usr/include/myincludefolder ./include)
# 将/usr/lib/mylibfolder 和 ./lib 添加到库文件搜索路径
link_directories(/usr/lib/mylibfolder ./lib)
# 通过变量 SRC 生成 libhello.so 共享库
add_library(hello SHARED ${SRC})
# 添加编译参数 -Wall -std=c++11 -O2
add_compile_options(-Wall -std=c++11 -O2)
# 编译main.cpp生成可执行文件main
add_executable(main main.cpp)
# 将hello动态库文件链接到可执行文件main
target_link_libraries(main hello)
# 添加src子目录,src中需有一个CMakeLists.txt
add_subdirectory(src)
# 定义SRC变量,其值为当前目录下所有的源代码文件
aux_source_directory(. SRC)
# 编译SRC变量所代表的源代码文件,生成main可执行文件
add_executable(main ${SRC})
4.2 重要变量
4.3 编译流程
- 1 编写CMakeLists.txt
- 2 执行命令:cmake 路径,生成makefile
- 3 执行命令:make
4.4 两种构建方式
五 Vscode
5.0 常用快捷键
快捷键 | 功能 |
---|---|
行注释 | ctrl+/ |
块注释 | ctrl+shift+A |
移动当前行 | alt+上/下 |
命令面板 | ctrl+shift+p |
转到文件 | ctrl+p |
转到行 | ctrl+g |
打开终端 | ctrl+~ |
变量重命名 | F2 |
打开/关闭侧边栏 | ctrl+B |
编辑器拆分 | ctrl+\ |
缩略图 | 菜单栏:查看/外观 |
代码缩进 | ctrl+[/] |
代码格式化 | ctrl+shift+I |
在下方插入一行 | ctrl+enter |
移到定义处 | F12 |
编辑区放大缩小 | ctrl+ -/+ |
5.1 界面
四大区:菜单栏、侧边栏、编辑区、状态栏
5.2 插件
5.3 .vscode 文件夹
1 launch.json
2 task.json
更多推荐
已为社区贡献7条内容
所有评论(0)