Какие файлы делали «сделать установку», а где? -- makefile поле с участием installation пол Связанный проблема

What files did `make install` copy, and where?


12
vote

проблема

русский

Есть ли способ получить список имена файлов / путей, которые <код> make install копирует на файловую систему? Некоторые пакеты приходят с явным файлом, но не те, с которыми я работаю.

Английский оригинал

Is there a way to get a list of filenames/paths that make install copies to the filesystem? Some packages come with a MANIFEST file, but not the ones that I am working with.

</div
     
   
   

Список ответов

13
 
vote
vote
Лучший ответ
 

Самый дурачный способ - использовать Chroot: иметь «сделать установку», запущенную внутри в тюрьме Chroot; Вычислить список файлов, которые вы имели до установки, и сравните это в список файлов после установки.

Многие установки будут поддерживать опцию конфигурации --prefix, так и / или переменную среды DESTDIR. Вы можете использовать их для более легкой версии Chroot (доверять, что установка не удастся, если она попытается записать на местонахождение на улице, если вы запускаете установку как довольно безвисильному пользователю).

Другой подход - заменить программу установки. Многие пакеты поддерживают переменную установки среды, которая, хорошо, это программа установки для использования; Есть отслеживание версий установки.

 

The most fool-proof way is to use chroot: have "make install" run inside a chroot jail; compute a list of the files that you had before the installation, and compare that to the list of files after the installation.

Many installations will support either a --prefix configuration option, and/or a DESTDIR environment variable. You can use those for a lighter-wait version of chroot (trusting that the installation will fail if it tries to write to a location outside these if you run installation as a fairly unprivileged user).

Another approach is to replace the install program. Many packages support an INSTALL environment variable that, well, is the install program to use; there are tracing versions of install around.

</div
 
 
15
 
vote

Я просто расследую это сам, при составлении пользовательской версии Qemu. Я использовал следующий метод для разработки того, что было установлено и где (а также используя его в качестве основы для файла .deb):

 <код> mkdir /tmp/installer ./configure --target-list=i386-softmmu make sudo make install DESTDIR=/tmp/installer cd /tmp/installer tree .   

Дерево - это утилита, которая рекурсивно отображает содержимое каталога визуально привлекательной манерой - <Код> sudo apt-get install tree для пользователей Debian / Ubuntu

Надеюсь, что это поможет кому-то ... Это потребовало меня немного покинуть, но я нашел его довольно полезным способом визуализации того, что происходит.

 

I was just investigating this myself while compiling a custom version of QEMU. I used the following method to work out what was installed and where (as well as using it as a basis for a .deb file):

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

Tree is a utility that recursively displays the contents of a directory in a visually appealing manner - sudo apt-get install tree for Debian / Ubuntu users

Hope that helps someone... it took me a bit of poking around to nut it out, but I found it quite a useful way of visualising what was going on.

</div
 
 
 
 
6
 
vote

<Код> make uninstall может отображать файлы, поскольку он удаляет их, если автор инструкций компиляции предоставляет информацию для удаления (это было некоторое время, так как я сделал один, так что я не могу сказать для уверен).

также <код> make -n install будет делать "сухой ru n " процесса установки, и может быть разумно извлечь информацию из его результатов.

 

make uninstall might show the files as it removes them if the author of the compiling instructions provides the information to allow an uninstall (it has been awhile since I have done one so I can't say for sure).

Also make -n install will do a "dry run" of the install process and it may be reasonable to extract the information from its results.

</div
 
 
 
 
4
 
vote

Это отличается для каждого проекта, на котором вы запускаете «Установить». Установленные файлы управляются целью установки в использовании MakeFile. Ваша лучшая ставка - открыть Makefile и поиск «Установить:» - оттуда вы можете посмотреть, какие файлы будут скопированы в вашу систему.

 

It differs for every project that you run 'make install' on. The files which are installed are controlled by the install target in the Makefile being used. Your best bet is to open the Makefile and search for 'install:' - from there you can see what files will be copied out to your system.

</div
 
 
1
 
vote
  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   
 
  1. Take a snapshot of the contents of the install location before installing
  2. Install
  3. Compare the current contents with the old contents.

Example:

./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 
</div
 
 
0
 
vote

Если программа установки, которую вы используете, не поддерживает DESTDIR или TPREFIX (или эквивалент), я обнаружил, что возможно, можно выделить новые файлы следующим образом:

  1. Начните с максимально чистыми системой (предпочтительнее изображение VM VM)
  2. Компиляция программного обеспечения, подождите несколько минут.
  3. Установите пакет программного обеспечения.
  4. Найти файлы, измененные в течение последних 5 минут: <код> sudo find / -mmin -5 -type f (команда поиска имеет тонну параметров для запроса на основе изменения файлов / времени создания файла, но это было довольно хорошо для меня; вам просто нужно Чтобы сузить промежуток времени, чтобы вы забрали файлы, созданные установщиком, но ничего другого).
 

If the install program you're using doesn't support DESTDIR or --prefix (or an equivalent), I have found that it may be possible to identify new files as follows:

  1. Start with as clean a system as possible (a fresh VM image is preferable)
  2. Compile the software, wait a few minutes.
  3. Install the software package.
  4. Find files modified within the past 5 minutes: sudo find / -mmin -5 -type f (the find command has a ton of parameters for querying based on file modification / creation times, but this worked pretty well for me; you just need to narrow the time span so that you pick up the files created by the installer but nothing else).
</div
 
 

Связанный проблема

-2  Ошибка нескольких определений LD  ( Multiple definition error ld ) 
У меня есть класс. Этот класс I с макросами WxWidgets составляют список. Работает. для бывшего.: <код> class A { public: A(); //any function public: //...

0  Makefile Plugins для Eclipse  ( Makefile plugins for eclipse ) 
Я работаю над проектом, который требует от меня понять строительство сложных макиянов. Есть ли плагин Eclipse, который может помочь мне сделать это? Я прост...

2  Компиляция matconvnet на windows  ( Compiling matconvnet on windows ) 
Я пытаюсь компилировать matconvnet на Windows 8.1. Поскольку мне кажется, что мне нужно использовать «Makefile», чтобы сделать это, я скачал gnuwin make , ...

0  Как узнать, является ли переменной makefile строкой char или номеров?  ( How to know if a makefile variable is a string of char or numbers ) 
Это, вероятно, звучит очень элементарным, но я не могу найти способ классифицировать переменную кассеты в текст или номер. Мой псевдокод такой: <код> ifeq (...

6  Переменные среды NetBeans для C ++ Makefile  ( Netbeans environment variables for c makefile ) 
У меня есть простой makefile, который вызывает компилятор C ++ как $(CXX) , который устанавливается в моем <код> ~/.profile SCRIPT. NetBeans, похоже, имеет ...

0  Попытка адаптировать существующие C проекту Cuda, файлы .cu не найдены makefile  ( Trying to adapt existing c project to cuda cu files not found by makefile ) 
Я пытаюсь ускорить функцию клавиш в проекте C (не C ++) с помощью CUDA. По какой-то причине я не могу получить makefile, чтобы узнать расширение .cu, когда ...

0  Использование аргументов Makefile без Foo =  ( Using makefile arguments without foo ) 
У меня есть makefile, который я использую для компиляции одного файла. Когда мне нужно пройти аргумент, я использую цель = TargetFile. Сценарий принимает ар...

20  Как решить ошибку: «Обнаружено так называемые так [Дубликат]  ( How to solve error clock skew detected ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

3  Преобразование nmake, чтобы сделать  ( Converting nmake to make ) 
Есть ли инструмент на рынке, который берет Visual Studio «Nmake» файлы и преобразует их в файлы Unix-Style «Make»? Есть ли какой-нибудь инструмент, который об...

0  Переопределение правил сборки в Make  ( Overriding build rules in make ) 
Я использую makefile для создания встроенного проекта. Я унаследовал проект от многих предыдущих разработчиков, которые не использовали допустить до полного п...

0  JNI делает файл не работает. Несколько определений  ( Jni make file is not working multiple definitions ) 
<Р> Так что я пытаюсь сделать JNI библиотеку, но файл сделает дает странную ошибку, что я действительно не понимаю. <код> /tmp/ccPWlMuy.o: In function `Java_...

5  Макияж и подстановочные знаки  ( Makefiles and wildcards ) 
Хорошо, так что это моя текущая настройка для makefile. Есть файлы, которые называются <код> public01.c , <код> public02.c и т. Д. Я пытаюсь сделать объектны...

4  Какой самый эффективный рабочий процесс Emacs для Compilation и интерактивных циклов выполнения (C ++ / Makefile)  ( Whats the most efficient emacs workflow for compilation and interactive executi ) 
Что является предпочтительной практикой для цикла компиляционного запуска в Emacs? Ранее я использовал m-x compile (сопоставлен на f12 ) с помощью команд...

1  В кассем, как мне предотвратить включение футового предрассуждения в $ ^  ( In a makefile how do i prevent a phony pre requisite from being included in ) 
У меня есть предварительный необходимый, который мне нужно объявить для цели, которая должна всегда работать, прежде чем пытаться построить цель. На самом дел...

0  Параметры линкера для статически связаны файл lib * .a при создании общего объекта  ( Linker options to statically link a lib a file while creating a shared object ) 
Как я могу сказать ссылку, что статически ссылка на libfoo.a при создании общего объекта sharedobj.so с использованием gcc / make. Я пытался передать параме...

Связанный проблема

-2  Ошибка нескольких определений LD 
0  Makefile Plugins для Eclipse 
2  Компиляция matconvnet на windows 
0  Как узнать, является ли переменной makefile строкой char или номеров? 
6  Переменные среды NetBeans для C ++ Makefile 
0  Попытка адаптировать существующие C проекту Cuda, файлы .cu не найдены makefile 
0  Использование аргументов Makefile без Foo = 
20  Как решить ошибку: «Обнаружено так называемые так [Дубликат] 
3  Преобразование nmake, чтобы сделать 
0  Переопределение правил сборки в Make 
0  JNI делает файл не работает. Несколько определений 
5  Макияж и подстановочные знаки 
4  Какой самый эффективный рабочий процесс Emacs для Compilation и интерактивных циклов выполнения (C ++ / Makefile) 
1  В кассем, как мне предотвратить включение футового предрассуждения в $ ^ 
0  Параметры линкера для статически связаны файл lib * .a при создании общего объекта