1. ホーム
  2. cmake

[解決済み] CMakeでポータブルパラレルビルドを設定するには?

2022-02-26 06:38:48

質問

どのビルドツールを使っても、並行してビルドできるようになりませんか?

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

解決方法は?

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

cmake(1) プロジェクトをビルドする ( cmake --build を得た。 --parallel [<jobs>]-j [<jobs>] オプションを使用して、並列ビルドレベルを指定します。これらは、ネイティブビルドツールの対応するオプションに対応します。

dkg が言っていたように という環境変数を設定することもできます。 CMAKE_BUILD_PARALLEL_LEVEL .

CMake のドキュメントへのリンクです。