2017-09-02 1 views
0

Si vous créez un projet en mode Release contenant uniquement un fichier .cpp avec int main() {}, vous verrez dans Configuration Properties > Linker > Command Line l'option /PGD:"C:\Users\*****\Documents\Visual Studio\Projects\solution name\Release\project name.pgd", comme si l'éditeur de liens devait créer un fichier de base de données pour une optimisation guidée par profil pour ce projet.Pourquoi Visual Studio affiche-t-il l'option/PGD dans la ligne de commande de l'éditeur de liens lorsque j'utilise uniquement l'option de l'éditeur de liens/LTCG?

Mais c'est clairement pas le cas, l'option /LTCG utilisée par l'éditeur de liens dans une version release est juste /LTCG et non /LTCG:PGINSTRUMENT. Pour corroborer cela, on peut vérifier l'absence de tout fichier .pgd dans le répertoire Release mentionné ci-dessus.

Pourquoi Visual Studio at-il cette option (/ PGD) dans la ligne de commande du projet?

P.S. J'utilise VS2017 pour cette simulation, mais je crois que le résultat devrait être le même dans les versions précédentes de Visual Studio.

+0

Peut-être que [cet article MS] (https://docs.microsoft.com/en-us/cpp/build/reference/pgd-specify-database-for-profile-guided-optimizations) article peut être utile. – Ron

+0

Cela confirme plus ou moins ce que j'ai dit. 'Lorsque vous utilisez/LTCG: PGINSTRUMENT, utilisez/PGD pour spécifier un nom ou un emplacement différent du fichier .pgd. – Belloc

+1

Cette option * always * a une valeur, la valeur par défaut est $ (OutDir) $ (TargetName) .pgd. Produire le chemin que vous avez montré. Changer le réglage est rarement nécessaire. Il n'est pas clair pourquoi vous n'aimez pas la valeur par défaut. –

Répondre

0

Chaque projet Visual Studio a l'option /PGD définie par défaut avec un chemin d'accès par défaut de $(OutDir)$(TargetName).pgd. Ce paramètre n'a aucun effet sauf si vous activez explicitement PGO à l'aide des options /LTCG:PG*.