【编译】gcc make cmake Makefile CMakeList.txt 关系、使用

文章目录

    • 一 关系
    • 二 gcc
      • 2.1 编译过程
      • 2.2 编译参数
      • 2.3 静态库和动态库
        • 1 后缀名
        • 2 联系与区别
      • 2.4 GDB 调试器
        • 1 常用命令
    • 三 make、makefile
    • 四 cmake、cmakelist
      • 4.1 语法特性
      • 4.2 重要命令
      • 4.2 重要变量
      • 4.3 编译流程
      • 4.4 两种构建方式
    • 五 Vscode
      • 5.0 常用快捷键
      • 5.1 界面
      • 5.2 插件
      • 5.3 .vscode 文件夹
        • 1 launch.json
        • 2 task.json

一 关系

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

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第1张图片

参考网址: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文件

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第2张图片

2.2 编译参数

1 -g 带调试信息

2 -O2 优化源代码

3 -l -L 指定库文件 | 指定库文件路径

4 -I 指定头文件搜索目录

5 -Wall 打印警告信息

6 -w 关闭警告信息

7 -std=c++11 设置编译标准

8 -o 指定输出文件名

9 -D 定义宏

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第3张图片

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第4张图片

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第5张图片

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 常用命令

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第6张图片

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第7张图片

三 make、makefile

四 cmake、cmakelist

4.1 语法特性

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第8张图片

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})

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第9张图片

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第10张图片

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第11张图片

4.2 重要变量

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第12张图片

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第13张图片

4.3 编译流程

  • 1 编写CMakeLists.txt
  • 2 执行命令:cmake 路径,生成makefile
  • 3 执行命令:make

4.4 两种构建方式

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第14张图片

五 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 界面

四大区:菜单栏、侧边栏、编辑区、状态栏

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第15张图片

5.2 插件

【编译】gcc make cmake Makefile CMakeList.txt 关系、使用_第16张图片

5.3 .vscode 文件夹

1 launch.json
2 task.json

你可能感兴趣的:(c语言,gcc,make,cmake)