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_executable
、add_library
和add_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.txt
和CMakeLists.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