Ubuntu Software安装

最方便。


apt安装

sudo apt install XXX

apt(advanced package tools)是ubuntu默认的软件包管理器,通过这种方式安装软件包,通常会将其安装在/usr/lib、/usr/share、/usr/bin目录下。

通过apt安装的ROS包包含了预编译的二进制文件,无需源码编译。安装过程中,apt会自动处理依赖关系,并从软件仓库中下载并安装所需的所有软件包。


deb文件安装

从网上下载deb,然后运行下面的指令安装

sudo dpkg -i XXX.deb  //-i|--install

这种方式安装一个deb文件,deb文件中的可执行文件会被安装到/usr/bin下,库文件会被安装到/usr/lib下,共享数据文件会被安装到/usr/share下。除此之外,也有特例,比如安装chrome的deb文件,会在/opt/google/chrome下安装相关的文件。


源码编译安装

这是最折磨人的一种安装方式。通常涉及以下指令

mkdir build && cd build
cmake ..
make
sudo make install

GitHub - eigenteam/eigen-git-mirror: THIS MIRROR IS DEPRECATED -- New url: https://gitlab.com/libeigen/eigen中的eigen为例,介绍源码编译安装,版本为3.3.9,不要随意安装,尤其是为了运行vins-fusion。

git clone https://github.com/eigenteam/eigen-git-mirror
cd eigen-git-mirror
mkdir build && cd build
cmake ..

cmake ..

cmake命令会解析源代码根目录中的CMakeLists.txt文件,并在构建目录中生成适当的构建系统文件(如Makefile、Visual Studio项目文件等),用于描述如何构建该软件包。

运行cmake ..后,命令行会提示这样的一段:

-- Configured Eigen 3.3.90
-- 
-- Some things you can do now:
-- --------------+--------------------------------------------------------------
-- Command       |   Description
-- --------------+--------------------------------------------------------------
-- make install  | Install Eigen. Headers will be installed to:
--               |     <CMAKE_INSTALL_PREFIX>/<INCLUDE_INSTALL_DIR>
--               |   Using the following values:
--               |     CMAKE_INSTALL_PREFIX: /usr/local
--               |     INCLUDE_INSTALL_DIR:  include/eigen3
--               |   Change the install location of Eigen headers using:
--               |     cmake . -DCMAKE_INSTALL_PREFIX=yourprefix
--               |   Or:
--               |     cmake . -DINCLUDE_INSTALL_DIR=yourdir
-- make doc      | Generate the API documentation, requires Doxygen & LaTeX
-- make check    | Build and run the unit-tests. Read this page:
--               |   http://eigen.tuxfamily.org/index.php?title=Tests
-- make blas     | Build BLAS library (not the same thing as Eigen)
-- make uninstall| Removes files installed by make install
-- --------------+--------------------------------------------------------------

这段说明了当前Eigen版本为3.3.90,同时我们可以更改头文件的安装路径:

cmake . -DCMAKE_INSTALL_PREFIX=/tmp/local

这里防止Eigen3.3.9污染我的环境,将其安装到/tmp/local

sudo make install

运行sudo make install后一些安装提示,这里贴了一部分。

-- Installing: /tmp/local/include/eigen3/Eigen/src/Geometry/Scaling.h
-- Installing: /tmp/local/include/eigen3/Eigen/src/Geometry/Umeyama.h
-- Installing: /tmp/local/include/eigen3/Eigen/src/Geometry/EulerAngles.h
-- Installing: /tmp/local/include/eigen3/Eigen/src/Geometry/Hyperplane.h
-- Installing: /tmp/local/include/eigen3/Eigen/src/Geometry/RotationBase.h
-- Installing: /tmp/local/include/eigen3/Eigen/src/Geometry/Homogeneous.h
-- Installing: /tmp/local/include/eigen3/Eigen/src/Geometry/arch
-- Installing: /tmp/local/include/eigen3/Eigen/src/Geometry/arch/Geometry_SSE.h
-- Installing: /tmp/local/include/eigen3/Eigen/src/MetisSupport
-- Installing: /tmp/local/include/eigen3/Eigen/src/MetisSupport/MetisSupport.h
-- Installing: /tmp/local/include/eigen3/Eigen/src/KLUSupport
-- Installing: /tmp/local/include/eigen3/Eigen/src/KLUSupport/KLUSupport.h
-- Installing: /tmp/local/include/eigen3/Eigen/src/Core
-- Installing: /tmp/local/include/eigen3/Eigen/src/Core/EigenBase.h

sudo make uninstall

如果想要卸载安装好的Eigen3.3.90,可以运行sudo make uninstall,这行命令在运行cmake ..后也会出现。

由于make uninstall的提示是在cmake .. 后出现的,而cmake .. 是对CMakeLists.txt进行解析,我想CMakeLists.txt中一定有生成make uninstall命令的代码:

536    # Add uninstall target
   537    add_custom_target ( uninstall
   538        COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/EigenUninstall.cmake)

在CMakeLists.txt的最后几行。先来一段解释:

第537行:使用了CMake的add_custom_target命令,这在CMake添加了一个名为"uninstall"的自定义目标(custom target)。

目标target:

在CMake中,目标(target)是构建系统的基本单位,代表一个要构建的输出物。它可以是一个可执行文件、静态库、共享库、对象文件、自定义命令等。

CMake提供了几个用于创建目标的命令,如add_executableadd_libraryadd_custom_target。这些命令允许用户定义不同类型的目标,并指定相关的属性和规则。

第538行:

${CMAKE_COMMAND}是CMake的可执行文件路径,而-P选项表示执行一个CMake脚本文件。

${CMAKE_CURRENT_SOURCE_DIR}是CMake内置变量,表示当前源代码目录的路径。

${CMAKE_CURRENT_SOURCE_DIR}/cmake/EigenUninstall.cmake是要执行的CMake脚本的完整路径。它可能是用于卸载某个软件包或删除某些文件的脚本。

这两行代码的作用,是生成一个自定义目标,让你在运行make uninstall的时候,该指令能够调用CMake命令行工具执行CMake脚本文件,最终实现Eigen的卸载。不严谨的说,可以将make uninstall指令简单的理解为EignUninstall.cmake的“快捷方式”。

make

因为Eigen3.3.90只包含头文件,所以在编译安装Eigen3.3.90时没有用到make。

catkin_make

catkin_make是一个ROS1独有的构建工具,包含了上面提到的源码编译用到的代码。下面我将以这个库GitHub - ZJU-FAST-Lab/Fast-Drone-250: hardware and software design of the 250mm autonomous drone为例,讲解catkin_make。

在工作空间内catkin_make后主要生成了两个目录:build、devel。

当你运行catkin_make后,会发生以下过程

配置构建环境:

  • catkin_make 切换到工作空间的根目录,并检查该目录下是否存在 CMakeLists.txt 文件。该文件描述了ROS软件包的构建配置。(这里的CMakeLists.txt文件是在各个功能包内)
  • catkin_make 创建一个名为 build 的文件夹(如果不存在),用于存储构建过程中生成的临时文件和构建输出。

依赖解析和构建:

  • catkin_make 解析工作空间中每个软件包的依赖关系,确定构建顺序,并调用 cmake 来生成构建系统所需的 Makefile。
  • 对于每个软件包,catkin_make 将切换到软件包的源代码目录,并在 build 文件夹中调用 cmake .. 来配置构建过程。这将生成与软件包相关的构建规则。(这里不一定是cmake ..,正如前面所讲的,..是CMakeLists.txt的路径)
  • 然后,catkin_make 调用 make 命令来编译每个软件包。make 根据生成的构建规则和依赖关系,将源代码编译成可执行文件或库。(这些文件应该都在devel中)

构建结果:

  • 构建过程完成后,catkin_make 会生成一些重要的文件和文件夹:
  • devel/ 文件夹:包含已构建软件包的可执行文件、库和其他资源。这是ROS工作空间的输出目录。
  • build/ 文件夹:存储构建过程中生成的临时文件和构建输出,包括Makefile等。
  • install/ 文件夹:包含将要安装到系统的软件包。可以通过运行 sudo make install 命令将其复制到系统标准位置。(在这个例子中并没有用到)
  • CMakeCache.txtCMakeLists.txt.user 等 CMake 相关的配置文件。

值得一提的是devel目录:

~/Fast-Drone-250/devel$ ls
cmake.lock  include  local_setup.bash  local_setup.zsh  setup.sh        setup.zsh
env.sh      lib      local_setup.sh    setup.bash       _setup_util.py  share

其中有lib和share,和之前提到的apt等安装方式涉及的/usr/lib, /usr/share等目录是等价的。

至此,我目前了解的四种Ubuntu下安装包的方式解释完了。2024/01/13