Windows n'a tout simplement pas certains des concepts nécessaires pour permettre à CMake de configurer votre environnement de construction. Lors de la liaison, Windows recherchera dans le même répertoire que le binaire, puis recherchera les répertoires dans votre PATH. Il n'y a rien comme RPATH, qui est utilisé sur la plupart des plates-formes Unix, pour injecter d'autres chemins plus appropriés. Les DLL doivent généralement être installées avec vos binaires, dans le même répertoire.
À mon avis, la meilleure pratique sous Windows consiste à placer les DLL à côté de vos fichiers binaires. CMake tente de rendre cela plus facile,
install(TARGETS MyTarget
EXPORT "MyProjectTargets"
RUNTIME DESTINATION "${INSTALL_RUNTIME_DIR}"
LIBRARY DESTINATION "${INSTALL_LIBRARY_DIR}"
ARCHIVE DESTINATION "${INSTALL_ARCHIVE_DIR}")
installerait les DLL dans la destination RUNTIME, mais placerait les bibliothèques dans la destination LIBRARY. Cela signifie que généralement sur les systèmes d'exploitation de type Unix, lib contient les objets partagés, mais CMake sait que les DLL sont effectivement exécutables et iraient dans bin. Espérons que cela rend les choses plus claires. Il est impossible pour CMake/Eclipse d'améliorer vraiment autant, au-delà peut-être d'injecter des répertoires supplémentaires dans votre PATH lorsque vous cliquez sur Exécuter depuis Eclipse (je ne sais pas si c'est possible).
Si vous êtes concerné par l'arborescence de construction, alors ce qui suit fonctionnerait bien là-bas (comme suggéré dans les commentaires ci-dessous) :
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib")
Si vous souhaitez autoriser leur remplacement (cela peut être utile), ils doivent également être protégés par des blocs if(NOT var_name).
Juste une réponse possible à ma propre question. Je pense que sous Linux, le rpath est utilisé pour identifier les emplacements des bibliothèques dépendantes, mais sous Windows avec mingw, je ne peux pas utiliser l'analyseur elf et donc je ne peux pas utiliser rpath.