有没有办法获得make install
复制到文件系统的文件名/路径列表?有些软件包附带了一个MANIFEST文件,但不是我正在使用的文件。
答案 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)
示例:
./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(或等效的),我发现可以识别新文件如下:
sudo find / -mmin -5 -type f
(查找命令有大量基于文件修改/创建时间查询的参数,但这对我来说效果很好;你只需要缩小时间跨度,以便您获取安装程序创建的文件,但没有其他内容。