Ano - presne tak... O zbastleni nejakeho skriptu na paralelní kompilaci a nasledne "neparalelni" slinkovani jsem uz take uvazoval... (neco podobneho sem delal pri simulacich v Matlabu na vicejadrovych masinach pripadne na vice ruznych masinach, kdy se vystupy ukladaly do slozky v dropboxu a na závěr se z toho sestavily vektorove grafy - navic se do slozky drop boxu ukládály do textovych souboru prubezne informace o simulacich, takze "pan vedator" mel prehled o tom co se deje pěkně v mobilu) Jedine, co me od podobne vychytavky usite na miru c++ odradilo bylo to, ze po IT cistce sem dal pryc vsechny desktopy a pro jednojadrovy 4 roky stary NB s Atomem to nema cenu delat...
Ale nebylo by to nic sloziteho:
* v projektu (uvažujme IDE Code::Blocks) zakazu kompilaci vsech cpp souboru...
* nastavim cestu ke scriptu, ktery se ma pustit pred kompilaci...
* tento skript projde adresar a pro kazdy cpp soubor vytvory samostatny skript, ktery jednak provede kompilaci daneho cpp (treba main.cpp), ale po kompilaci take vytvori prazdny soubor main.cpp.done
* smazou se vsechny *.done soubory po predchozi kompilaci
* pusti se vsechny scripty (ktere byly vygenerovany pro kompilaci) s parametrem " &" (vse pojede na pozadi) a pak uz se jen v cyklu (se sleepem) kontroluje existence vsech *.done souboru...
* ve chvili, kdy existuji vsechny *.done soubory, muze se linkovat...
Na 4 jadru by to byl hukot...
Zajiste zjišťovat stavy pres soubory neni elegantni, na druhou stranu je tím vyresen paralelni zapis/cteni do "sdílené pameti"...
Vetsi projekty se deli do podadresaru, ale není problem najit vesksre cpp SOUbory i takto zanorene...
Bylo by potreba poladit hodne drobnosti, ale pak by to byl hukot... :-)
No a jak tak koukam, tak zrovna Code Blocks umi paralelne kompilovat, to musím co nejdriv prověřit: http://forums.codeblocks.org/index.php?topic=15529.0
???
Pokud řídíte kompilaci pomocí Makefile, existuje tu přepínač
make -j
Pokud má příslušný Makefile soubor správně udělané závislosti,
pustí se vše co se pustit muže a jak dobíhají předpoklady, pouštějí
se postupně závislé úlohy. Pochopitelně u větších projektu to spolehlivě
zavaří CPU, proto je dobré omezit maximální počet paralelně puštěných
úloh
make -j N
N se mi osvědčilo jako počet CPU x 2. Záleží ale na projektu a vkusu.
(man make)