CMAKE Parallel Build проблема - PullRequest
       3

CMAKE Parallel Build проблема

0 голосов
/ 23 марта 2019

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

Cmake третьей стороны, как показано ниже

External_Project_Add( ...
             ....
             #NO BUILD_COMMAND) 

Но компиляция идет слишком медленно, и я вижу, что максимальное количество компиляций не превышает 8 потоков, а загрузка ЦП составляет ~ 20%. (мы также используем distcc). Если я изменю, как показано ниже

External_Project_Add( ...
             ....
         BUILD_COMMAND ${CMAKE_COMMAND} --build <dir> --parallel --)

Компиляция выполняется очень быстро по крайней мере в 3 раза. Однако иногда система исчерпывает PID.

Есть ли способ контролировать максимальное количество PID / процессов, доступных для CMAKE?

Я думал об использовании опции -j - BUILD_COMMAND, но она искусственно уменьшит количество компиляции, доступное моей системе.

Я попытался изменить $ (MAKE) в моей сторонней программе make на -jn, но затем он показывает предупреждение домена для сервера заданий. Не стоит менять также стороннюю марку. Поэтому я отбросил эту идею.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 23 марта 2019
$ cmake --build . --help
Unknown argument --help
Usage: cmake --build <dir> [options] [-- [native-options]]
Options:
  -j [<jobs>] --parallel [<jobs>] = Build in parallel using
                   the given number of jobs. If <jobs> is omitted
                   the native build tool's default number is used.
                   The CMAKE_BUILD_PARALLEL_LEVEL environment variable
                   specifies a default parallel level when this option
                   is not given.

cmake передает запросы -j и -j <jobs> в инструмент сборки.cmake --build запустит соответствующий инструмент сборки в зависимости от используемого генератора и добавит правильные параметры для запуска параллельной сборки.Так что просто используйте -j <jobs>, чтобы ограничить максимальное количество запрошенных заданий.

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