Как использовать GNU Делает режим пробного запуска с созданным CMake Makefile до фактического выполнения установки - PullRequest
0 голосов
/ 29 апреля 2019

Время от времени необходимо создавать новый архив или новый xyHub / Lab-репозиторий.Они обычно поставляются с Makfile или Autotools / CMake / XY-Generator обеспечивает один на лету.Поскольку сопровождающие, скорее всего, используют другую операционную систему или дистрибутив, чем тот, который я сейчас использую, предположения, которые вошли в их Make-файлы, обычно не соответствуют моей иерархии файловой системы (lib против lib64, bin против sbin, / usr / lib vs./ lib и так далее).Поскольку последняя команда в последовательности сборки обычно имеет вид

sudo make install

, довольно неудобно перемещать тысячи файлов в нужное место.Или еще хуже определить, какие файлы моего дистрибутива были перезаписаны.Здесь GNU делает режим пробного запуска очень удобным.Выполнение сначала

sudo make -n install

избавляет меня от необходимости очищать мою файловую систему, просто печатая все команды из всех активных GNU Make рецептов, не выполняя их.В случае рукописного или сгенерированного Autotools Makfile это работает как задумано.Если Makefile содержит что-то вроде:

#PREFIX is environment variable, but if it is not set, then set default value
ifeq ($(PREFIX),)
    PREFIX := /usr/local
endif

install: unixlib.a
    install -d $(DESTDIR)$(PREFIX)/lib/
    install -m 644 unixlib.a $(DESTDIR)$(PREFIX)/lib/
    install -d $(DESTDIR)$(PREFIX)/include/
    install -m 644 unixlib.h $(DESTDIR)$(PREFIX)/include/

, я бы точно увидел, что произойдет.Каждая install / cp / mv -команда с полной информацией о пути будет напечатана.Если я ошибся с префиксом установки на этапе настройки, я могу увидеть его там.Если по умолчанию в Makefile странно, потому что он исходит от другой ОС, я бы увидел его там.

Теперь в случае с Makeake-файлом, сгенерированным CMake, все по-другому.Выполнение

mkdir build && cd build
cmake ..
make
sudo make -n install

приводит только к выводу, который заканчивается на

...
make -f CMakeFiles/Makefile2 preinstall
/usr/bin/cmake -E cmake_echo_color --switch= --cyan "Install the project..."
/usr/bin/cmake -P cmake_install.cmake

Поскольку эти команды не выполняются, просто выводятся, я не получаю все cp / mv / mkdir / install / etc-команд, которые я хотел бы увидеть в первую очередь, прежде чем я позволю Makefile коснуться файловой системы.

Есть ли способ получить список команд, которые будут выполняться изустановить цель в сгенерированном CMake Makefile, как это происходит с рукописными или сгенерированными Autotools?

1 Ответ

0 голосов
/ 30 апреля 2019

Есть ли способ получить список команд, которые будут выполняться из цели установки.

Собственно, основная часть процесса установки содержится в файле cmake_install.cmake(который создается в каталоге сборки).Этот файл обрабатывается как Сценарий CMake с использованием потока cmake -P исполняемого файла cmake .

Сценарий cmake_install.cmake выполняет установку файлов с помощью команды install.Семантика команды install, используемой сценарием, отличается от описанной в документации : внутренне CMake использует некоторые недокументированные возможности команды.

Но это не должно бытьтак сложно понять сценарий cmake_install.cmake в общем и вывести из него пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...