2017-06-20 7 views
0

Je compile un gros projet (~ 40 bibliothèques et 1 exécutable) en utilisant QtCreator/w Qt 5.6 pour Android. QtCreator utilise "mingw492_32 \ bin \ mingw32-make.exe" pour faire fonctionner la construction.L'option `-j` de mingw32-make est-elle cassée?

Lorsque je compile avec les options par défaut, tout mon projet compile bien.

Lorsque j'ajoute la commande -j4 ou -j8 à mingw32-make.exe dans les paramètres du projet QtCreator, la génération est plus rapide mais échoue de manière aléatoire. À un certain moment, alors que la bibliothèque B liens avec A, je peux voir dans le journal qui essaie de lier B tout A compilation est pas encore terminée, il rapporte cannot open ..../libA.so.

Notez que:

  • le fait que B liens avec A est géré par LIBS += -l$$OUT_PWD/../../lib/A/libA.so dans le fichier .pro de B
  • B apparaît après A en haut niveau fichier .pro (SUBDIRS += A.pro B.pro)
+1

Make est, malheureusement, pas bon dépendances de manipulation lorsque vous faites une construction parallèle. Cela signifie qu'il pourrait essayer de construire quelque chose qui dépend de quelque chose d'autre qui n'est pas encore construit. –

+0

@Someprogrammerdude: Mais QtCreator est celui qui invoque Make, ne devrait-il pas le supporter? – jpo38

+0

Étant donné que QtCreator ne définit pas le drapeau par défaut, il est possible que les makefiles créés par QtCreator ne soient pas configurés pour gérer gentiment les constructions parallèles. –

Répondre

1

Selon Qmake project dependencies (linked libraries), dependecies doit être spécifié explicitement dans les fichiers .pro.

J'ajouté dans mon haut niveau fichier .pro (après SUBDIRS += A.pro B.pro):

CONFIG += ordered 
B.depends += A 

aussi PRE_TARGETDEPS += $$OUT_PWD/../../lib/A/libA.so à Ans B.so

Avec ces changements, la construction avec -j4 option fonctionne apparemment, et il divise mon temps de compilation de projet par 3 !!