当前位置: 首页 > web >正文

第4天:Linux开发环境搭建

🧰 第4天:Linux开发环境搭建


一、GCC 编译器

📌 1. 什么是 GCC?

GCC(GNU Compiler Collection)是 GNU 工程开发的编译器集合,主要支持 C、C++、Fortran 等语言的编译,是 Linux 系统中的默认编译器。

🛠️ 2. 安装与配置(以 Ubuntu 为例)

sudo apt update
sudo apt install build-essential

build-essential 包含了 GCC、G++、Make 等常用编译工具。

✅ 3. 验证是否安装成功

gcc --version

二、Make 工具详解

📌 1. Make 是什么?

Make 是一个构建自动化工具。它通过读取 Makefile 文件中的依赖关系和命令来决定如何编译项目。


📄 2. Makefile 结构与例子

项目文件结构:
project/
├── main.c
└── Makefile
main.c:
#include <stdio.h>
int main() {printf("Hello, Make!\n");return 0;
}
Makefile:
main: main.ogcc -o main main.omain.o: main.cgcc -c main.cclean:rm -f *.o main
使用流程:
make        # 编译项目
./main      # 运行
make clean  # 清理目标文件

🧠 3. Make 的优缺点

优点缺点
快速直接跨平台支持差
简单易上手手动维护依赖和目标较麻烦
不需要额外工具结构不清晰,难以维护大型项目

三、CMake 构建系统详解

📌 1. CMake 是什么?

CMake 是一个跨平台的自动化构建系统生成工具,可以为不同平台生成构建文件(如 Unix 下的 Makefile,Windows 下的 Visual Studio 工程文件等)。


🧱 2. 使用步骤与示例

项目结构:
project/
├── main.c
├── CMakeLists.txt
main.c:
#include <stdio.h>
int main() {printf("Hello from CMake!\n");return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(MyApp)
add_executable(main main.c)
构建命令:
mkdir build
cd build
cmake ..
make
./main

🔨 3. 添加多个源文件 & 头文件目录

project/
├── include/
│   └── hello.h
├── src/
│   └── hello.c
├── main.c
└── CMakeLists.txt
CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(MyApp)include_directories(include)
file(GLOB SOURCES "src/*.c" "main.c")add_executable(myapp ${SOURCES})

🧠 4. CMake 常用命令总结

命令作用
project(<name>)定义项目名
add_executable(<name> ...)定义可执行文件及其源文件
include_directories()添加头文件搜索路径
file(GLOB ...)自动收集所有源文件
set(CMAKE_C_STANDARD 11)设置 C 语言标准

四、Make vs CMake 对比

特性MakeCMake
适用范围小型项目,需手写依赖大中型项目,自动管理依赖
构建文件手写 Makefile自动生成 Makefile、Visual Studio 工程等
可维护性差,复杂项目容易混乱高,结构清晰,支持模块化构建
跨平台支持强,适用于多平台(Linux/Windows/macOS)
项目规模支持小型中大型或复杂依赖项目
IDE 集成一般完美支持 CLion、VSCode、VS 等

五、Git 基本操作详解

🧭 1. 常用命令汇总

功能命令
克隆git clone https://github.com/user/repo.git
添加git add .
提交git commit -m "描述"
推送git push origin main
拉取git pull origin main
创建分支git branch dev
切换分支git switch dev
合并分支git switch main + git merge dev

📊 2. Git 工作原理图

工作区
暂存区
本地版本库
远程仓库

六、热门面试题

❓1. 工作区、暂存区、版本库的区别?

答:

  • 工作区:当前可见、正在编辑的文件
  • 暂存区(Index):用 git add 添加后等待提交的内容
  • 本地仓库:使用 git commit 后的历史版本

❓2. merge 和 rebase 的区别?

答:

操作特点
merge创建一个新的合并提交,保留所有分支历史
rebase将一条分支上的提交“移动”到另一分支之后

面试建议:理解 merge 更安全,rebase 更整洁,但不适用于公共历史的分支。


❓3. 如何解决 Git 冲突?

答:

  1. 打开冲突文件,查找 <<<<<<< 标记;
  2. 保留正确代码,删除冲突标记;
  3. 使用命令解决冲突:
git add .
git commit

❓4. CMake 与 Make 的关系?

答:

CMake 是构建系统“生成器”,它生成适用于目标平台的构建文件(如 Makefile)。Make 是构建工具,它执行这些构建文件完成实际的编译工作。


http://www.xdnf.cn/news/1324.html

相关文章:

  • 配置Intel Realsense D405驱动与ROS包
  • 配置 Apache 的 HTTPS
  • 一些确保 iPaaS 集成平台与现有系统安全集成的方法
  • 操作系统环境变量
  • 每天五分钟深度学习PyTorch:图像的处理的上采样和下采样
  • Vue3:component(组件:uniapp版本)
  • JavaScript学习教程,从入门到精通,Ajax与Node.js Web服务器开发全面指南(24)
  • C++学习之游戏服务器开发十五QT登录器实现
  • 面试篇:Java并发与多线程
  • gem5-gpu教程03 当前的gem5-gpu软件架构(因为涉及太多专业名词不知道该如何翻译所以没有汉化)
  • 牛客 verilog入门 VIP
  • 粒子系统开启Noise模块在移动端的消耗如何
  • 无线监控系统分类全解析:搭配视频融合平台EasyCVR开启高效监控
  • CSS外边距合并现象
  • 【GESP】C++二级真题 luogu-B4259 [GESP202503 二级] 等差矩阵
  • ChatBEV:一种理解 BEV 地图的可视化语言模型
  • 基于GA遗传优化TCN-BiGRU注意力机制网络模型的时间序列预测算法matlab仿真
  • GTS-400 系列运动控制器板(十)----获取轴的轴状态、运动模式、位置、速度和加速度
  • 容器内部无法访问宿主机服务的原因及解决方法
  • 文案提取有错别字怎么办?
  • 使用Geotools实现将Shp矢量文件加载SLD并合并图例生成-以湖南省周边城市为例
  • 【每天一个知识点】如何解决大模型幻觉(hallucination)问题?
  • 二叉树OJ题目
  • 并行RANSAC平面拟合(C++)
  • LeetCode-417. 太平洋大西洋水流问题
  • 基于VUE+Node.JS实现(Web)学生组队网站
  • SPSS ANOVA分析test
  • SQLMesh 通知系统深度解析:构建自动化监控体系
  • 【Bug】 [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
  • 文档构建:Sphinx全面使用指南 — 实战篇