Запустить несколько команд 'make' одновременно? - PullRequest
0 голосов
/ 17 января 2020

( make noob здесь)

Я сделал следующее:

  1. Сконфигурировал проект C ++ с CMake.
  2. В одном терминале tab, запустил make , чтобы начать сборку всего проекта.
  3. Надоело ждать, пока все это будет построено, подумал, что я могу просто сделать подпапку я работает в данный момент.
  4. Не останавливая текущую сборку на первой вкладке, открыл вторую вкладку и запустил make из указанной подпапки.

В течение короткого времени все выглядело довольно нормально, а затем на второй вкладке начали отображаться результаты сборки, относящиеся ко всему проекту, а не только к подпапке. Я подумал, что то, что я попробовал, не сработало, как я ожидал, поэтому я нажал CTRL- C на второй вкладке.

Вот когда случилось самое странное: на первой вкладке выходные данные сборки были смешаны с появлением строк сформируйте указанную папку c, которую я хотел построить. И сборка прошла более 100%, до 128%!

Мой вопрос: Что именно делает «make» при запуске более одного раза одновременно?

Правильно ли я считаю, что несколько команд make были «объединены» в одном процессе ??

1 Ответ

1 голос
/ 17 января 2020

Это больше вопрос о make-файлах, которые создает CMake, и о том, как они работают. Именно эти make-файлы делают такие вещи, как отслеживание завершенного процента и т. Д. c., А не make. Вполне возможно, что, запустив вторую сборку в том же каталоге, вы испортили все средства, используемые make-файлами CMake для отслеживания прогресса.

Короткий ответ: нет, невозможно, чтобы один вызов make каким-то образом "захватит" или объединит другой вызов make. Что касается программы make, то они ничего не знают друг о друге. Однако, поскольку оба работают в одной и той же файловой системе, если один make записывает файлы таким образом, который может сбить с толку другой make, вы можете увидеть странное поведение.

Сгенерированные cmake make-файлы очень сложны очень ; Я никогда не пытался полностью понять, как они работают. Мне всегда было жаль, что никто не пытался реализовать генератор CMake GNU Makefile в дополнение к генератору Unix Makefiles, который в полной мере использовал возможности GNU make. Я уверен, что результаты будут легче читать и, вероятно, быстрее. Но кажется маловероятным, что это когда-либо случится; Пользователи CMake, которые больше заботятся о скорости, чем о переносимости, вероятно, просто переключаются на использование Ninja в качестве генератора.

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