Как настроить переносимые параллельные сборки в CMake?

Можно ли каким-то образом иметь параллельную сборку независимо от того, какой инструмент сборки используется?

В Unix мы можем добавить make -jN, где N — количество потоков, а в Windows я добавил к CXX_FLAG "/MP", который затем используется в Visual Studio. для параллельной сборки...(?) Как мне сделать так, чтобы моя версия CMAKE_MAKE_PROGRAMне всегда расширялась при запуске CMake?

Что такое общее решение?

Я придумал это:

# Add some multithreaded build support
MARK_AS_ADVANCED(MULTITHREADED_BUILD)
set(MULTITHREADED_BUILD 12 CACHE STRING "How many threads are used to build the project")
if(MULTITHREADED_BUILD)
    if(${CMAKE_GENERATOR} MATCHES "Unix Makefiles")
            message(STATUS ${CMAKE_BUILD_TOOL})
            set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} -j${MULTITHREADED_BUILD}")
            message(STATUS "Added arguments to CMAKE_BUILD_TOOL: ${CMAKE_MAKE_PROGRAM}")
    elseif(MSVC)
      set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
      message(STATUS "Added parallel build arguments to CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
    endif()
endif()
42
задан Peter Mortensen 9 April 2019 в 23:57
поделиться