什么文件`make install` copy,以及在哪里?

时间:2009-10-01 21:00:14

标签: makefile install

有没有办法获得make install复制到文件系统的文件名/路径列表?有些软件包附带了一个MANIFEST文件,但不是我正在使用的文件。

6 个答案:

答案 0 :(得分:15)

我在编译QEMU的自定义版本时只是在调查这个问题。我使用以下方法来计算安装的内容和位置(以及将其用作.deb文件的基础):

mkdir /tmp/installer
./configure --target-list=i386-softmmu
make
sudo make install DESTDIR=/tmp/installer
cd /tmp/installer
tree .

Tree是一个以视觉上吸引人的方式递归显示目录内容的实用程序 - 对于Debian / Ubuntu用户来说是sudo apt-get install tree

希望能有所帮助......我花了一些时间来解决这个问题,但我发现这是一种非常有用的可视化方式。

答案 1 :(得分:11)

最简单的方法是使用chroot:在chroot监狱内运行“make install”;计算安装前的文件列表,并将其与安装后的文件列表进行比较。

许多安装都支持--prefix配置选项和/或DESTDIR环境变量。您可以将它们用于较轻等待版本的chroot(如果您尝试将其作为一个相当无特权的用户进行安装,那么如果它尝试写入这些位置以外的位置,则相信安装将失败。)

另一种方法是替换安装程序。许多软件包都支持一个INSTALL环境变量,它是要使用的安装程序;有安装的跟踪版本。

答案 2 :(得分:4)

对于您运行'make install'的每个项目,它都有所不同。安装的文件由正在使用的Makefile中的安装目标控制。最好的办法是打开Makefile并搜索“install:” - 从那里你可以看到哪些文件将被复制到你的系统中。

答案 3 :(得分:3)

如果编译指令的作者提供了允许卸载的信息,那么

make uninstall可能会显示文件,因为它会删除它们(因为我已经做了一段时间,所以我不能肯定地说)。

同样make -n install会对安装过程进行“干燥 n ”,从结果中提取信息可能是合理的。

答案 4 :(得分:1)

  1. 在安装之前对安装位置的内容进行快照
  2. 安装
  3. 将当前内容与旧内容进行比较。

示例:

./configure --prefix /usr/local
make -j`nproc`

find /usr/local | sort -u > /tmp/snapshot1
make install
find /usr/local | sort -u > /tmp/snapshot2
comm -3 /tmp/snapshot{1,2} # this prints the files added by `make install` to stdout

答案 5 :(得分:0)

如果您使用的安装程序不支持DESTDIR或--prefix(或等效的),我发现可以识别新文件如下:

  1. 从尽可能干净的系统开始(最好是新的VM映像)
  2. 编译软件,等几分钟。
  3. 安装软件包。
  4. 查找过去5分钟内修改过的文件:sudo find / -mmin -5 -type f(查找命令有大量基于文件修改/创建时间查询的参数,但这对我来说效果很好;你只需要缩小时间跨度,以便您获取安装程序创建的文件,但没有其他内容。