seguir seguidores que puedo pueden porque poner permite pasa para mis mas los hashtags funcionan cuantos conseguir con como aparecen cmake parallel-builds

seguidores - ¿Cómo configurar compilaciones paralelas portátiles en CMake?



porque mis hashtags no aparecen en instagram (4)

Como esta publicación ya es un poco vieja:

Mi enfoque al que me he acostumbrado es escribir un script parallelmake.sh para generadores basados ​​en Unix Makefiles Esto se hace aquí: https://github.com/gabyx/ApproxMVBB

Y las partes relevantes en el archivo cmake:

https://github.com/gabyx/ApproxMVBB/blob/master/CMakeLists.txt#L89

#Add some multithreaded build support ===================================================================================================== MARK_AS_ADVANCED(MULTITHREADED_BUILD) SET(MULTITHREADED_BUILD ON CACHE BOOL "Parallel build with as many threads as possible!") if(MULTITHREADED_BUILD) if(${CMAKE_GENERATOR} MATCHES "Unix Makefiles") file(COPY ${ApproxMVBB_ROOT_DIR}/cmake/parallelmake.sh DESTINATION ${PROJECT_BINARY_DIR} FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE NO_SOURCE_PERMISSIONS ) SET(CMAKE_MAKE_PROGRAM "${PROJECT_BINARY_DIR}/parallelmake.sh") MESSAGE(STATUS "Set make program to ${PROJECT_BINARY_DIR}/parallelmake.sh") 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() # ========================================================================================================================================

¿Es de alguna manera posible tener una compilación paralela sin importar qué herramienta de compilación se use?

En Unix podemos agregar make -jN donde N es el número de subprocesos y en Windows agregué al CXX_FLAG "/MP" que luego se usa en Visual Studio para construir en paralelo ...? ¿Cómo puedo crear mi versión de modo que CMAKE_MAKE_PROGRAM no siempre se extienda cuando ejecuto CMake?

¿Qué es una solución general?

Se me ocurrió esto:

#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()


Con CMake 3.12 esto es posible. De las notas de la versión:

El modo de herramienta de compilación "cmake (1)" ("cmake -build") obtuvo las opciones "- parallel []" y "-j []" para especificar un nivel de compilación paralelo. Se asignan a las opciones correspondientes de la herramienta de construcción nativa.


No puedes hacer esto multiplataforma. La opción -jN es un parámetro para crear, y no es parte del Makefile generado. Sin embargo, puede hacer que CMake genere un script de bash que ejecute make para su proyecto usando -jN (donde el script busca la cantidad de núcleos que tiene).


Si tienes cmake v2.8.8 o superior, puedes usar ninja como una alternativa a GNU make

mkdir build cd build cmake -G Ninja .. ninja # Parallel build (no need -j12)

o

mkdir build cd build cmake -G Ninja .. cmake --build . # Parallel build using ninja

Como puede ver, no es necesario usar CMAKE_MAKE_PROGRAM , la construcción se ejecuta en paralelo de forma predeterminada, optimizando la cantidad de trabajos en función de los núcleos de CPU disponibles.

ninja se basa en una configuración JSON de bajo nivel para acelerar la fase de inicio. Por lo tanto, su configuración JSON no es fácil de escribir a mano y siempre la genero utilizando una herramienta de alto nivel / IDE:

Como la compilación de C ++ a menudo requiere mucha memoria, su computadora debe proporcionar tanta memoria como la cantidad de núcleos de CPU.