Je suis tombé sur quelque chose de similaire, voulant copier un fichier DLL dans un répertoire de destination, mais uniquement pour les versions de version. Après beaucoup de cheveux déchirés, j'ai réussi à le faire fonctionner en utilisant quelques expressions génératrices (les $<...>
thingies). Je le mets ici sept ans plus tard pas tellement pour résoudre votre problème (bien que j'admire votre niveau de pertinence), mais afin de sauver les cheveux crâniens de la prochaine personne ayant ce même problème et de trouver cette question sur google:
set(no_copy $<NOT:$<CONFIG:Release>>)
add_custom_command(TARGET myDLL POST_BUILD
COMMAND "${CMAKE_COMMAND}" -E
# do nothing for non-Release build
$<${no_copy}:echo> $<${no_copy}:"copy omitted for non-release build, command would have been ">
# copy file for release build
copy_if_different $<TARGET_FILE:myDLL> ${DIR_FOR_DLL})
l'astuce consiste à écrire un echo
devant la commande qui seraient autrement émis. On pourrait entourer le reste de la ligne de commande dans un certain nombre d'expressions de générateur pour raccourcir la sortie au détriment d'un fichier cmake complètement illisible. D'un autre côté, il semble qu'il n'y ait aucun moyen de supprimer la copie de manière portative sans générer de sortie. Enfin, si vous pensez qu'il y a une sortie facile et que vous pouvez simplement écrire , je vous conseille de vous épargner la déception.
J'utilise VS2008 et CMake 2.8 et cela ne fonctionne pas. – Robert
-1: CMAKE_BUILD_TYPE est uniquement défini lors de l'exécution. Cette réponse est fausse. – Gili
@Gili: pour les générateurs à configuration unique (générateur Makefile), il est disponible au moment de la génération. – richq