linux系统下基于VSCode和CMake进行C/C++开发

linux系统下如何学习开源代码?
gdb如何调试源代码
此博客为哔哩哔哩课程视频笔记:基于VSCode和CMake实现C/C++开发 | Linux篇

该课程对应公众号笔记

1.gcc编译器

如果是c语言,使用gcc编译器
如果是c++语言,使用g++编译器

1.1.g++编译过程

 g++ -E test.cpp -o test.i
 g++ -S test.i -o test.s
 g++ -c test.s -o test.
 g++ test.o -o test1

预处理
编译
汇编
链接

1.2.g++重要编译参数

-g

g++ -g

产生包含可调式信息的可执行文件

-o2

g++ -o2

优化源代码
一般选择o2就够用了,默认为o1

time ./test

通过time命令执行test可执行文件。

-l和-L 指定库文件和库文件路径

/lib
/usr/lib
/usr/local/lib
里面的库直接使用-l参数就能链接

g++ -lglog test.cpp

链接glog库
如果库文件没有在上面三个目录里面,需要使用-L参数(大写)指定库文件所在目录。

g++ -L/home/rdm/test -lmytest test.cpp

链接/home/rdm/test路径下的mytest库

-I 指定头文件搜索目录

默认头文件所在目录:/usr/include
-I是include的缩写。
如果

-Wall 打印警告信息

-w 关闭警告信息

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

-o 指定输出的文件名

不加 -o,默认输出a.out可执行文件

-D 定义宏

编译的时候定义宏

man指令

查看执行的英文手册

man gcc

1.3.实战:g++命令行编译

tree .

打印当前文件夹下代码的目录结构


dmran@** ~/rdm/code  21:43 $ tree ./
./
├── include
│   └── swap.h
├── main
├── main.cpp
└── swap
    └── swap.cpp

1.3.1直接编译

编译命令

 g++ main.cpp swap/swap.cpp -Iinclude -o main

1.3.2 链接静态库生成可执行文件

1).汇编,生成swap.o文件

dmran@** ~/rdm/code/swap  21:51 $ g++ -c swap.cpp -I../include
dmran@** ~/rdm/code/swap  21:52 $ ls
swap.cpp  swap.o

2).生成静态库libswap.a

dmran@** ~/rdm/code/swap  21:52 $ ar rs libswap.a swap.o
ar: creating libswap.a
dmran@** ~/rdm/code/swap  21:53 $ ls
libswap.a  swap.cpp  swap.o

3).链接生成可执行文件:static_mian
dmran@** ~/rdm/code  21:55 $ g++ main.cpp -lswap -Lsrc -Iinclude -o static_main
dmran@** ~/rdm/code  21:56 $ ls
include  main  main.cpp  src  static_main

1.3.3 链接动态库生成可执行文件

-shared

表示生成动态库

1).生成动态库

rdm@** ~/rdm/code/src  22:06 $ g++ swap.cpp -I../include -fPIC -shared -o swap.so
rdm@** ~/rdm/code/src  22:06 $ ls
libswap.a  swap.cpp  swap.so

上面的命令相当于下面两条命令:


rdm@** ~/rdm/code/src  22:09 $ g++ swap.cpp -I../include -fPIC -c
rdm@** ~/rdm/code/src  22:09 $ ls
libswap.a  swap.cpp  swap.o
rdm@** ~/rdm/code/src  22:10 $ g++ -shared -o libSwap.so swap.o
rdm@** ~/rdm/code/src  22:10 $ ls
libswap.a  libSwap.so  swap.cpp  swap.o

2).链接,生成可执行文件
g++ main.cpp -lswap -Lsrc -Iinclude -o dyna_main

LD_LIBERARY_PATH指定动态库的查找路径

2.gdb调试器

2.1 gdb常用命令参数

2.2 实战

再gdb调试环境下,按一下【ctrl+l】清屏。

shh远程终端如何分屏

3.IDE-VSCode

4.CMake

跨平台的的安装编译工具

CMakeList可以通过camke命令生成不同平台下的构建文件。
visual sudio >msbuild
xcode
>xcodebuild
makefile==make
如果一个项目增加了一个文件,只需要修改cmakelist文件,而不用改变不同平台的构建文件。
如果灭有cmake工具,那么每个平台的构建文件都需要修改一遍。

语法特性

基本语法格式:
指令(参数1 参数2…)
参数之间使用空格或分号隔开。

变量使用${}取值

重要指令

cmake_minimumu_required指定cmake的最小版本要求

project定义工程名称,并可指定工程可支持的语言

set显示的定义变量

set(var [value][])

# 定义SRC变量,其值为sayhello.cpp hello.cpp
set(SRC sayhello.cpp hello.cpp)

include_directories-向工程添加多个特定头文件搜索路径

link_directories-向工程添加多个特定的库文件搜索路径

add_library-生成库文件

add_library(libname [shared|static|module\

# 通过SRC生成hello.so共享库
add_library(hello SHARED ${SRC})

add_compile_options-添加编译参数

add_compile_options(-wall -std=c++11 -o2)

add_executable-生成可执行文件

add_executable()

aux_source_directory

aux_source_directory(. SRC)

CMake常用变量

CMAKE_C_FLAGS gcc编译选项
CMAKE_Cxx_FLAGS g++编译选项
CMAKE_BUILD_TYPE

CMake编译工程

cmake目录结构:项目主目录存在一个CMakeList文件
两种编译规则:
1.
2.

编译流程

手写CmakeLists.txt
执行cmake Path生成makefile(PATH是顶层CMakeLists.txt所在目录)
执行make进行编译

两种构建方式

实战:CMake代码实践

5.实战:使用VSCode进行完整项目开发

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值