At the end of this script snippet, the CMake variable PROCESSOR_COUNT has a value appropriate for passing to make's -j for parallel builds.

 

When used in a ctest -S script, you can call...


if(PROCESSOR_COUNT)

  set(CTEST_BUILD_FLAGS "-j${PROCESSOR_COUNT}")

endif()

 

...to enable parallel builds with "Unix Makefiles" and the ctest_build command.



Here's the snippet:

if(NOT DEFINED PROCESSOR_COUNT)

  # Unknown:

  set(PROCESSOR_COUNT 0)

 

  # Linux:

  set(cpuinfo_file "/proc/cpuinfo")

  if(EXISTS "${cpuinfo_file}")

    file(STRINGS "${cpuinfo_file}" procs REGEX "^processor.: [0-9]+$")

    list(LENGTH procs PROCESSOR_COUNT)

  endif()

 

  # Mac:

  if(APPLE)

    find_program(cmd_sys_pro "system_profiler")

    if(cmd_sys_pro)

      execute_process(COMMAND ${cmd_sys_pro} OUTPUT_VARIABLE info)

      string(REGEX REPLACE "^.*Total Number Of Cores: ([0-9]+).*$" "\\1"

        PROCESSOR_COUNT "${info}")

    endif()

  endif()

 

  # Windows:

  if(WIN32)

    set(PROCESSOR_COUNT "$ENV{NUMBER_OF_PROCESSORS}")

  endif()

endif()

 

Cheers!


Share