
1.Cmake 使用干什么的?为什么要用 Cmake?怎么用?Cmake 和 Makefile 有什么区别?使用上有什么区别?Cmake 是不是比 Makefile 更好?答:CMake 使用干什么的?为什么要用 CMake?举例,项目只有两个文件:demo/ ├─ main.cpp └─ CMakeLists.txtCMakeLists.txt:cmake_minimum_required(VERSION 3.10) project(demo) add_executable(app main.cpp)执行:mkdir build cd build cmake .. # 扫描本机,在build里面生成Makefile make # 执行cmake生成好的Makefile,调用g++编译 ./app怎么用?(1)在项目源码根目录编写 CMakeLists.txt,声明项目名、源文件、依赖库、编译选项;(2)新建独立 build 构建目录,进入该目录,执行 cmake ..,读取上层目录的配置,在 build 内部生成 Makefile/VS 工程;(3)Linux 环境执行 make 完成编译;Windows 直接打开生成的 VS 工程编译;(4)后续修改源码直接编译,修改CMakeLists.txt需要重新执行 cmake 命令刷新构建文件。遵循源码目录与构建目录分离的最佳实践。CMake 和 Makefile 有什么区别?Makefile是make工具直接执行的底层编译脚本。CMake是元构建工具,CMakeLists.txt为抽象描述文件,CMake的输出产物可以是Makefile。二者并非同级替代,CMake在上层做平台适配,Makefile是底层执行载体。使用上有什么区别?手写Makefile:直接维护编译规则,运行make即可编译;跨平台需维护多套脚本,新增源码、库依赖需要手动修改脚本。CMake:维护CMakeLists.txt,一份配置多平台复用;需要先执行cmake生成构建产物再编译,需要学习CMake语法,小项目会带来额外开销。CMake 是不是比 Makefile 更好?没有绝对优劣。小规模单平台Demo,手写Makefile更轻量;项目规模大、依赖第三方库、需要跨平台、对外分发代码时,CMake优势显著。CMake只解决构建配置问题,底层编译依旧依赖gcc、make等工具。2.gcc、g++、gdb有什么区别?分别什么时候使用?答:总的来说:gcc:编译 C;.c纯 C 项目。g++:编译 C++/ 混合代码;.cpp,日常 C++ 首选。gdb:调试工具;程序出 bug、崩溃时调试,编译需带‑g。举例:# 编译C gcc main.c -o main_c # 编译C++ g++ main.cpp -o main_cpp # 编译带调试信息,给gdb用 g++ main.cpp -g -o main_debug # 启动调试 gdb ./main_debug3.CMake中一切变量数据默认都是字符串String。4.Cmake中set的使用。答:有种常见的用法:(1)最简单用法:普通 set,存一个字符串# 给字符串"drone_demo"起个别名叫 MY_PROJECT set(MY_PROJECT "drone_demo") # 使用这个别名,必须套 ${} add_executable(${MY_PROJECT} main.cpp)等价于