質問

どのビルドツールを使用しても並列ビルドを持つことができることはどういうわけか?

UNIXでは、n個のスレッドの数で、Visual Studioで並列ビルドに使用されているmake -jNに追加されたWindowsでは、CXX_FLAG "/MP"を追加します。(?)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()
.

役に立ちましたか?

解決

CMAKE 3.12では可能です。リリースノートから:

「CMAKE(1)」ビルドツールモード( "CMAKE-BUILD") " - 並列 並列ビルドレベルを指定するための[] "と" -j [] "オプション。 それらはネイティブビルドツールの対応するオプションにマッピングされます。

dkg に記載されているように環境変数CMAKE_BUILD_PARALLEL_LEVELを設定することもできます。

Cmakeのドキュメントへのリンク:

他のヒント

Cmake v2.8.8以上がある場合は、 ninja CMAKE v2.8.8 (2012)

  • QT Creator v2.6 (2012)
  • kDevelop v4.6 (2013)
  • meson Linux(2013)
  • ... https://github.com/ninja-build/ninja/wiki/list-of-generators - proding-ninja-build-files
  • C ++ビルドが多くのメモリを必要とするため、コンピュータはCPUコアの数と同じくらい多くのメモリを提供する必要があります。

    Ruslan 、Cmake 3.12 (2018)には新しいオプション cmake --build -j <N>を制限するために、<N>コア(ジョブ)を制限するため、メモリ消費量を制限します( documentation )。古いCMAKEバージョンを使用する場合は、cmake --build -- -j <N>を使用できます。 Option --は、その下にあるBuilderツールに直接RESTを直接渡すようにCMAKEに指示します。ここでは忍者です。

    このクロスプラットフォームをすることはできません。-jnオプションは、生成されたメイクファイルの一部を作成するためのパラメータです。ただし、CMAKEに-JNを使用しているプロジェクトの作成を実行するBASHスクリプトを生成することができます(スクリプトがあなたが持っているコアの数を検索する場所)。

    parallelmake.shベースのジェネレータ用のUnix Makefilesスクリプトを書き込むために落ち着いた。これはここで行われます。 https://github.com/gabyx/appoxmvbb

    と該当する部品の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()
    # ========================================================================================================================================
    
    .

    ライセンス: CC-BY-SA帰属
    所属していません StackOverflow
    scroll top