GCC编译器
g++ C++
gcc C
编译过程
预处理:
g++ -E test.cpp -o test.i
编译:
g++ -S test.i -o test.s
汇编
g++ -c test.s -o test.o
链接: -o 为将来地可执行文件用指定的文件名
g++ test.o -o test
g++重要编译参数
- -g :产生带调试信息的可执行文件
- -O 优化源代码 -O0表示不做优化,-O1为默认优化,-O2 除了完成-O1的优化之外,还进行一些额外的调整工作,如指令调整等;-O3 包括循环展开和其他一些与处理特性相关的优化工作(time ./可执行文件 可以输出记录可执行文件的运行时间)
- -l 指定库文件 -L 指定库文件路径 -l参数用来指定程序要链接的库,-l参数紧接着就是库名, 在/lib和/usr/lib和/usr/local/lib里的库直接用-l参数就能链接 eg: g++ -lglog test.cpp 如果库文件没有放在上面三个目录里,需要使用-L参数指定库文件目录即-L参数紧跟着库文件所在的目录名 eg: g++ -L/home/bing/myfolder -lmytest test.cpp
- -I指定头文件搜索目录 如果头文件不在/usr/include目录下,则需要通过-I/muinclude 来进行参数的指定,-I可以采用./的相对路径
- -Wall 打印警告信息
- -w 关闭警告信息
- -std=c++11 设置编译标准
- -o 指定输出文件名
- -D 定义宏 -DDEBUG 会在代码中及进行#ifdef的判断
生成库文件并编译
链接静态库生成可执行文件
g++ swap.cpp -c -I../include // 汇编生成swap.o文件,-I指定该swap.cpp中引用头文件的位置
ar rs libSwap.a Swap.o //生成静态库libSwap.a ,
// 其中静态库文件必须有lib前缀,lib后面的Swap为符号名,链接的时候使用符号名
g++ main.cpp -Iinclude -Lscr -lSwap -o staticmain // 链接生成可执行文件
// 其中-I指定头文件的位置,-L只当静态库的位置,-l静态链接符号名
./staticmain // 运行可执行文件链接动态库生成可执行文件
g++ swap.cpp -I../include -fPIC -shared -o //生成动态库
g++ main.cpp -Iinclude -Lsrc -lswap -o sharemain //链接生成可执行文件
LD_LIBRARY_PATH=src ./sharemain // 运行可执行文件,需指定动态库路径srcGDB调试器
VSCode
windows CRLF \r\n
Linux LF \n
高频使用快捷键

ctrl + shift + I 格式化代码
F2 变量统一重命名
CMake
CMake是一个跨平台的安装编译工具,可以用简单的语句描述所有平台的安装(编译过程)

基本语法格式 :指令(参数1 参数2…)
- 参数使用括弧括起
- 参数之间使用空格或分号分开
指令是大小写无关的,参数和变量是大小写相关的
变量使用${}方式取值,但是在IF控制语句中是直接使用变量名
重要指令
- cmake_minimum_required :指定CMake的最小版本要求
- cmake_minimum_required(VERSION 2.8.3)
- project 定义工程名称,并可指定工程支持的语言 hui’kui
- project(HELLOWORLD) 指定工程为为HELLOWORLD
- set 显式的定义变量
- set(SRC sayhello.cpp hello.cpp) 定义SRC变量,值为sayhello.cpp hello.cpp
- include_directories 向工程添加多个特定的头文件搜索路径 即-I
- include_directories(/usr/include/mufolder ./include) 将该两个目录添加到头文件搜索路径
- link_directories 向工程添加多个特定的库文件搜索路径 即-L
- link_directories(/usr/lib/mufolder ./lib) 将该两个目录添加到库文件搜索路径
- add_library 生成库文件
- add_library(hello SHARED|STATIC|MODULE ${SRC} ) 通过变量SRC生成/.a共享库
- add_compile_options 添加编译参数
- add_compile_options(-wall -std=c++11 -o2)
- add_executable 生成可执行文件
- add_executable(main main.cpp)
- target_link_libraries 为target添加需要链接的共享库 即 -l参数
- target_link_libraries(main hello test)
CMake常用变量
CMAKE_C_FLAGS gcc编译选项
CMAKE_CXX_FLAGS g++编译选项
set(CMAKE_CXX_FLAGS “${CMAKE_CXX_FLAGS -std=c++11”}) 在编译选项后追加-std=c++11
CMAKE_BUILD_TYPE 编译类型
set(CMAKE_BUILD_TYPE Debug) 设定编译类型为debug,调试时需要选择debug
set(CMAKE_BUILD_TYPE Release) 设定编译类型为release,发布时需要选择release
编译流程
- 手动编写CmakeLists.txt
- 执行命令cmake PATH 生成 Makefile (PATH式顶层CMakeLists.txt所在的目录)
- 执行命令make进行编译
两种构建方式
- 内部构建 (会在同级目录下产生一大堆中间文件,)
- 外部构建(将编译输出文件与源文件放到不同目录中)
















