使用sudo apt-get install命令时,为什么没有源代码?

我试图安装一个用于机器人操作系统(ROS)的软件包。然后我直接输入sudo apt-get install <package>
安装完成后,我在/opt/share文件夹中看到了一系列我想要的软件包。
但是如果我进入src文件夹,源代码(.cpp文件)就不在那里。
如果我去开发者的GitHub页面,我可以看到源代码,但是为什么软件包在没有使用源代码的情况下被安装了呢?我如何使用apt-get install命令下载源代码并安装软件包呢?

顺便提一下,我认为从标准仓库中安装的软件很少会被安装到/opt/share目录下,这不是很不寻常吗? - Hagen von Eitzen
@HagenvonEitzen 是的。没有任何默认软件使用 /opt/ 目录,那样会违反文件系统层次结构。 - Rinzwind
2个回答

默认情况下,apt-get install不会下载软件包的源代码。有一个特定的apt-get选项可以做到这一点,即source。
来自man apt-get:
源码 source使apt-get获取源代码包。APT将检查可用的软件包以决定要获取哪个源代码包。然后,它将在当前目录中找到并下载最新可用版本的该源代码包,同时尊重使用APT::Default-Release选项、-t选项或使用pkg/release语法为每个软件包设置的默认发布。
源代码包通过sources.list(5)文件中的deb-src行与二进制包分开跟踪。这意味着您需要为每个要从中获取源代码的存储库添加这样一行;否则,您可能会得到错误的(太旧/太新)源代码版本或根本没有源代码。
因此,下载某个东西的源代码包到当前目录的语法将是(无需root权限):
apt-get source <package_name>

请注意,正如“man”页面所说,您需要启用deb-src存储库以跟踪源代码包的所有常规deb存储库。最简单的方法是将-src添加到原始存储库的初始deb字符串中。
deb http://archive.ubuntu.com/ubuntu/ trusty main restricted
deb-src http://archive.ubuntu.com/ubuntu/ trusty main restricted

另外一件事,你可能已经检查了位于/usr/src目录下的所有内核源代码的指定位置。

@heemayl 的回答告诉你如何获取源代码,但如果你有疑问的话,
为什么包可以在没有使用源代码的情况下安装呢?
这是因为 Ubuntu 不会从源代码构建软件包,而是下载预编译的二进制文件。
然而,像 Gentoo Linux 这样的发行版会下载源代码并在本地构建软件包。