VS: cmake --build builds multiple --target targets serially
CMake Generated Visual Studio projects's targets are not getting build in parallel.
We have recently moved to Visual Studio Generator for our windows build. And while doing some analysis I found that if I build multiple independent targets using cmake, it does not parallelly build them.
C:\Program Files\Microsoft Visual Studio\2022\Professional>cmake --build C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug --parallel --target LibA; LibB; LibC -- /p:CL_MPcount=16 -nologo
Checking Build System
Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
A.cpp
LibA.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibA.lib
Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
B.cpp
LibB.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibB.lib
Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
C.cpp
LibC.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibC.lib
C:\Program Files\Microsoft Visual Studio\2022\Professional>
But If I have another target which depends on these targets and I build that target, these targets build in parallel.
C:\Program Files\Microsoft Visual Studio\2022\Professional>cmake --build C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug --parallel --target CMakeProject4 -- /p:CL_MPcount=16 -nologo
Checking Build System
Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
C.cpp
B.cpp
A.cpp
LibC.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibC.lib
LibB.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibB.lib
LibA.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibA.lib
D.cpp
LibD.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibD.lib
Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
CMakeProject4.cpp
CMakeProject4.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\CMakeProject4.exe
C:\Program Files\Microsoft Visual Studio\2022\Professional>
Is it expected behavior? As per below reference MSBuild should build multiple targets in parallel.
If I select multiple independent targets via VS Solution View (by opening sln file) and build them, they build in parallel.
Build started...
1>------ Build started: Project: ZERO_CHECK, Configuration: Debug x64 ------
1>Checking Build System
2>------ Build started: Project: LibD, Configuration: Debug x64 ------
3>------ Build started: Project: LibC, Configuration: Debug x64 ------
4>------ Build started: Project: LibB, Configuration: Debug x64 ------
5>------ Build started: Project: LibA, Configuration: Debug x64 ------
2>Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
2>D.cpp
4>Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
3>Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
3>C.cpp
2>LibD.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibD.lib
5>Building Custom Rule C:/Users/mohsin.siddiqui/source/repos/CMakeProject4/CMakeProject4/CMakeLists.txt
3>LibC.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibC.lib
5>A.cpp
5>LibA.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibA.lib
4>B.cpp
4>LibB.vcxproj -> C:\Users\mohsin.siddiqui\source\repos\CMakeProject4\out\build\x64-debug\CMakeProject4\Debug\LibB.lib
========== Build: 5 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Elapsed 00:01.394 ==========
Edited by Brad King