[CMake] How to determine the number of processors available from CMake code

David Cole david.cole at kitware.com
Thu Oct 7 16:50:15 EDT 2010


I just posted a short blog article demonstrating how to figure out the
number of processors available for a "make -j" or a scripted ctest_build
call (with the "Unix Makefiles" generator) on Linux, Mac and Windows. Please
let me know if you have any ideas for how it might be improved or extended.

http://www.kitware.com/blog/home/post/63


Cheers,
David


Blog text copied here, too, for search-ability on the mailing list archives:
==============================================================================
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()
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.cmake.org/pipermail/cmake/attachments/20101007/6eb7f282/attachment.htm>


More information about the CMake mailing list