[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