> 文章列表 > linux系统下基于VSCode和CMake进行C/C++开发

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

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

linux系统下如何学习开源代码?

1.gcc编译器

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

1.1.g++编译过程

 g++ -E test.cpp -o test.ig++ -S test.i -o test.sg++ -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进行完整项目开发