g++、cmake、库、IDE

g++将cpp编译为可执行程序

在Linux中,程序是一个具有执行权限的文件。可以是一个脚本,也可以是一个二进制文件,不过我们不限定它的后缀名(不像Windows指定成exe)

  1. 我们写一个文本文件helloSLAM.cpp
  2. 然后用g++(C++的一个编译器)把它编译成可执行文件a.out
g++ helloSLAM.cpp

想要指定生成的文件名,用

g++ -o 文件名 helloSLAM.cpp
  1. 执行可执行程序
./a.out  # Linux下./表示运行
使用cmake
  1. 写CMakeLists.txt
# 声明要求的cmake最低版本
cmake_minimum_required(VERSION 2.8)

# 声明一个cmake工程
project(HelloSLAM)

# 添加一个可执行程序
# 语法:add_executable(程序名  源代码文件)
add_executable(helloSLAM helloSLAM.cpp)
  • cmake工程、程序名、源代码文件名可以不同
  1. 在当前目录下输入
cmake .
  • 上述cmake生成了CMakeFiles、CMakeCachetxt、cmake——install.cmake、Makefile
  • 注意cmake后的. 表示对在当前目录下进行cmake

    CMakeLists告诉cmake要对这个目录下的文件做什么事情。
    cmake输出一些编译信息,然后在当前目录生成了一些中间文件,包括xxx.cmake , xxx.txt , 最重要的是Makefile
3. 终端输入
make
  • 这一步我们生成了CMakeLists中add_executable(helloSLAM helloSLAM.cpp)声明的可执行程序helloSLAM
  1. 执行
./ helloSLAM

总结:对于一个cpp,我们可以用g++直接编译,也可以先写CMakeLists,然后执行cmake再执行make。——执行cmake的过程处理了工程文件之间关系,执行make实际上调用了g++来编译程序。这样对项目的编译,从输入一串g++指令变成了若干个CMakeLists.txt文件

  1. 可选地:cmak生成的中间文件不是我们想要留在代码中的
    所以我们可以把中间代码放在一个中间目录,编译成功后,把这个中间目录删除
mkdir build
cd build
cmake .. #表示对上一级目录也就是代码所在的文件夹进行编译
make
@tri-seven:~/slambook2/ch2$ mkdir build
@tri-seven:~/slambook2/ch2$ cd build
@tri-seven:~/slambook2/ch2/build$ cmake ..
CMakeCache.txt  CMakeFiles  cmake_install.cmake  Makefile
@tri-seven:~/slambook2/ch2/build$ make
@tri-seven:~/slambook2/ch2/build$ ls
CMakeCache.txt  CMakeFiles  cmake_install.cmake  HelloSLAM  Makefile
@tri-seven:~/slambook2/ch2/build$ cd ..
@tri-seven:~/slambook2/ch2$ ls
build  CMakeLists.txt  helloSLAM.cpp

观察结果,我们发现cmake生成的中间文件make生成的可执行程序都在build文件夹中了。执行build中的可执行程序,确定cpp文件没问题后,如果我们要发布源码,就可以把build文件夹删掉。

注意:LInux中执行命令是  ./

总结
  • cmake生成的是中间文件,管理工程文件之间的关系
  • make生成可执行文件
cmake生成库和使用库

在一个C++工程中,不是所有代码都会编译成可执行文件。只有带有main函数的文件才会生成可执行程序。而另一些代码,我们只想把它打包成一个东西,供其他程序调用。这个东西叫做 库(Library)

cmake生成库

Linux中,库文件分为静态库和共享库两种,静态库以.a作为后缀名,共享库以.so结尾。所有库都是一些函数打包
后的集合,差别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本,更省空间。
对比CMakeLists.txt中的语句:

add_library(hello libHelloSLAM.cpp)  # 生成静态库,得到 `libhello.a`
add_library(hello SHARED libHelloSLAM)  # 生成共享库,得到 `libhello.so`
使用库

库文件是个压缩包,里面有编译好的二进制文件
为了让别人用这个库,我们需要提供一个头文件,说明这些库里都有什么。因此,只要拿到了头文件和库文件,就可以调用这个库
参考该库提供的头文件,以明白调用的格式,同时要把可执行程序链接到库文件上

完整案例
  1. 写一个helloSLAM.cpp(有main函数)
  2. 用cmake生成可执行程序helloSLAM
  3. 写一个libhelloSLAM.cpp(无main函数)
  4. cmake一个静态库hello.a、一个共享库hello_shared.so
  5. 写一个libhelloSLAM.h
  6. 写一个usehello.cpp(有main函数,在main里调用库函数)
  7. cmake一个调用静态库的usehello可执行程序
  8. cmake一个调用共享库的usehello_shared可执行程序

Note:

  • 在CMakeLIsts里面写的库名称为xxx,实际生成libxxx,后缀视静态库和共享库而定;但是我们在target_link_libraries时,必须写成xxx,而不是libxxx。

  • 我们可以先写好.cpp,然后生成库,使用库,链接库也在CMakeLists.txt写好,最后全部一起cmake。

  • CMakeLists里面所有命名不加后缀。

IDE
Clion

进入Clion官网,然后申请教育账号,然后下载toolbox,进入本地Downloads,解压,安装,进入toolbox界面,安装需要的IDE。

Pycharm
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值