我最近学到了使用
直到今天,我一直以为每个软件包都有自己的源代码,并且不同的软件包会有不同的源代码。
然而,现在我刚刚发现不同的软件包可以拥有相同的源代码。以下是一个例子:
以下4个软件包似乎具有相同的源代码:
所有这四个软件都已经安装在我的Ubuntu 19.04电脑上。执行
以下是我进行验证的步骤:
上面最后一行的递归差异没有输出,表明这些目录具有相同的内容。
现在来谈谈我的问题:不同的软件包如何拥有相同的源代码?
假设这是有意为之而不是某种错误,那么这些软件包之间有什么区别,我如何看到这个区别?
可能是这些软件包在源代码的配置和编译方式上有所不同,例如不同的代码部分被包含在不同的软件包中?如果是这样,我在哪里可以找到关于如何配置每个软件包的信息?
编辑:忘记添加了,如果您想要测试这个,请确保首先使用software-properties-gtk启用apt-get source,具体操作请参考这里:https://askubuntu.com/a/857433/874649。
编辑2: 感谢大家给出的优秀答案!我还发现这个链接很有帮助 https://askubuntu.com/a/246721/874649 -- 关于
apt-get source
获取任何给定软件包的源代码是多么容易,这样我就可以获取源代码,进行修改并安装自己修改过的软件包。这太棒了!直到今天,我一直以为每个软件包都有自己的源代码,并且不同的软件包会有不同的源代码。
然而,现在我刚刚发现不同的软件包可以拥有相同的源代码。以下是一个例子:
以下4个软件包似乎具有相同的源代码:
gir1.2-mutter-4
libmutter-4-0
mutter
mutter-common
所有这四个软件都已经安装在我的Ubuntu 19.04电脑上。执行
apt-get source gir1.2-mutter-4
和apt-get source libmutter-4-0
命令得到的结果完全相同,对于mutter
和mutter-common
软件包也是如此。以下是我进行验证的步骤:
mkdir a
cd a
apt-get source gir1.2-mutter-4
cd ..
mkdir b
cd b
apt-get source libmutter-4-0
cd ..
diff -r a b
上面最后一行的递归差异没有输出,表明这些目录具有相同的内容。
现在来谈谈我的问题:不同的软件包如何拥有相同的源代码?
假设这是有意为之而不是某种错误,那么这些软件包之间有什么区别,我如何看到这个区别?
可能是这些软件包在源代码的配置和编译方式上有所不同,例如不同的代码部分被包含在不同的软件包中?如果是这样,我在哪里可以找到关于如何配置每个软件包的信息?
编辑:忘记添加了,如果您想要测试这个,请确保首先使用software-properties-gtk启用apt-get source,具体操作请参考这里:https://askubuntu.com/a/857433/874649。
编辑2: 感谢大家给出的优秀答案!我还发现这个链接很有帮助 https://askubuntu.com/a/246721/874649 -- 关于
apt-get build-dep
和 dpkg-buildpackage
命令,它们非常有用。在修改源代码后,可以使用 dpkg-buildpackage -us -uc
来构建新的.deb文件,这些文件可以用来安装修改过的程序。
apt-get build-instructions mutter
"这样的东西——你知道是否有类似的方法吗?以获取实际构建二进制软件包所需的命令列表,例如首先运行configure,然后再运行make,确切地如何执行以生成给定的二进制软件包。 - Eliasdebian/rules
文件中。如果不深入研究代码本身,无法通过命令行获取这些信息。如果你真的对构建系统的工作原理感兴趣,你需要了解更广泛的概念 - Ubuntu 打包(http://packaging.ubuntu.com/html/)和 Debian 打包(https://wiki.debian.org/Packaging)- 因为其中的概念对于理解二进制文件的创建、编译以及实际打包安装在二进制包中的过程至关重要。 - Thomas Ward