cynk, które mogą pomóc użytkownikom CWprowadä
Opcja -jN nie działa, gdy dzwoni makefile zrobić rekurencyjnie jako CWprowadä-makefile zazwyczaj zrobić. Ale istnieje remedium, które znowu działa, ponieważ w wygenerowanych plikach Makefile wywołania CMake za pomocą takiej składni.
$(MAKE) -f CMakeFiles\Makefile2 <subproject>
Oznacza to, że można zmodyfikować zmienną Marka:
mingw32-make "MAKE=mingw32-make -j3"
Teraz za każdym razem podprojektem-make jest uruchomiona, to znowu dostanie opcję "-j3". Należy jednak zauważyć, że to faktycznie nie ogranicza liczby równoległych kompilacji do 3, jak można się spodziewać. Jeśli masz więcej niż 3 projekty, które nie zależą od siebie nawzajem w tej samej hierarchii, wszystkie 3 projekty będą budowane równolegle, a każda z nich uruchomi 3 etapy kompilacji. W wyniku 9 równoległych kroków kompilacji.
Kiedy przyjrzymy się bliżej górze pliku Makefile generowanego przez cmake, widzimy, że cel "wszystko" w zasadzie uruchamia tylko sub-make.
$(MAKE) -f CMakeFiles\Makefile2 all
Więc możemy zdjąć jedną warstwę podprojektu równoległości wywołując
mingw32-make "MAKE=mingw32-make -j3" -f CMakeFiles\Makefile2 all
Ale to poświęca raportowania postępów.
Mam nadzieję, że to pomoże.
Twoje prawo. Zrobiłem to, aby działało, jak opisujesz - musiałem tylko rozszyfrować okropny plik makefile, aby znaleźć odpowiedni punkt do zrobienia -j (spraw, aby wywołanie sprawiało, że ...). – Oliver
jeśli używasz powłoki cygwin/MinGW: nie zapomnij ustawić zmiennej systemowej 'shell' na' cmd' (w przeciwnym wypadku domyślnie użyjesz sh lub sh.exe (na przykład na Cygwin ...) i wygrałeś nie będzie w stanie obsługiwać wielu procesów). po prostu wyeksportuj 'SHELL = CMD'. łatwo. –
@Karako Nieee, proszę, nie rób tego. 'sh' po prostu działa. Jest to platforma wieloplatformowa. Nie ma problemów z równoległością. (na _cygwin _ tak - nie mogę ręczyć za _mingw_.) 'cmd' jest po prostu okropne. – bobbogo