IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Visual Studio avec CMake : probl�me de runtime


Sujet :

Visual C++

  1. #1
    Membre averti
    Homme Profil pro
    Ing�nieur Etudes
    Inscrit en
    Juillet 2010
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur Etudes

    Informations forums :
    Inscription : Juillet 2010
    Messages : 54
    Par d�faut Visual Studio avec CMake : probl�me de runtime
    Bonjour,

    Afin de distribuer un plus gros projet sous windows et Unix, je m'entra�ne � compiler un simple projet type HelloWorld en utilisant CMake et Visual Studio.
    Ce projet d�pend de certaines librairies externes que j'arrive � linker � la compilation mais pas au runtime !
    De ce que je sais, c'est qu'il faut copier les dll dont d�pend l'ex�cutable dans son dossier (je sais pas comment faire pour qu'il les lise dans un autre dossier) autrement il ne les trouve pas et le programme plante.
    J'aimerai que le programme puisse les copier automatiquement sans copier tout un r�pertoire et �videmment sans le faire � la main.

    Alors j'ai tent� plusieurs choses avec mon CMakeList.txt mais rien n'a march� : ou bien il y a des erreurs dans le CMakeLists, ou bien non mais les dll ne sont pas copi�es.
    Je vous mets la partie int�ressante de mon fichier :
    Code CMakeLists : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Add source to this project's executable.
    add_executable (HelloWorldOTB "HelloWorldOTB.cpp" "HelloWorldOTB.h")
    target_link_libraries(HelloWorldOTB ${OTB_LIBRARIES})
     
    # TODO: Add tests and install targets if needed.
    if (WIN32)
        #add_custom_command(COMMAND ???)
        #install(CODE [[file(GET_RUNTIME_DEPENDENCIES EXECUTABLES "${CMAKE_CURRENT_BINARY_DIR}/HelloWorldOTB.exe" RESOLVED_DEPENDENCIES_VAR dll_lib)]])
        #message("Dll_lib : ${dll_lib}")
        # copy the .dll file to the same folder as the executable
        install(TARGETS HelloWorldOTB RUNTIME DESTINATION bin)
        #add_custom_command(TARGET HelloWorldOTB POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different $$(<TARGET_FILE : ${OTB_SHARED}>) $$(<TARGET_FILE_DIR : HelloWorldOTB>))
    endif()

    Comme vous pouvez le voir j'ai tent� plusieurs choses, la derni�re en date �tant avec "install".
    Quand j'ai essay� avec file(GET_RUNTIME_DEPENDENCIES EXECUTABLES #...), la variable de sortie "dll_lib" �tait vide...

    Bref, je bute.

  2. #2
    Membre averti
    Homme Profil pro
    Ing�nieur Etudes
    Inscrit en
    Juillet 2010
    Messages
    54
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Ing�nieur Etudes

    Informations forums :
    Inscription : Juillet 2010
    Messages : 54
    Par d�faut
    Apr�s une interruption tr�s longue li�e � d'autres soucis, j'ai cherch� la solution et...je suis tomb� sur ce post. Mon post.

    C'est si difficile que �a ? Voire impossible ?

  3. #3
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Faut dire que la fr�quentation de ce sous-forum me para�t assez faible; j'ignore combien de gens sur dvp utilisent beaucoup Visual Studio, ni combien parmi ceux-l� utilisent aussi CMake.
    Personnellement, je ne connais pas du tout CMake...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre �clair� Avatar de Suryavarman
    Homme Profil pro
    D�veloppeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : D�veloppeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par d�faut
    Je remonte ce sujet car j�ai un probl�me tr�s similaire voir identique.

    J�essaie de compiler un projet simple sous VS 2022 avec CMake.

    J�ai un projet Toto
    Il y a un sous projet API
    Et un un sous projet GUI

    En r�sum�:
    API/CMakeLists.txt
    Code CMakeLists : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    add_library(API SHARED ${API_HEADERS} ${API_TEMPLATES} ${API_CPP})
    add_library(Toto::API ALIAS API) # L’Alias il parait que ça fait bien ça ne change rien pour le problème

    GUI/CMakeLists.txt
    Code CMakeLists : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    target_link_libraries(GUI Toto::API)

    Sous Visual, �a compile parfaitement. Mais quand il s�agit de lancer l�application via Visual � bein il lui manque la DLL. Il faut l�ajouter � la main.

    Quelques liens:
    https://alexandre-laurent.developpez...toriels/cmake/
    https://cmake.org/cmake/help/v3.0/co...libraries.html
    https://cmake.org/cmake/help/latest/...ex:TARGET_FILE


    Coup de gueule contre CMake/Windows.
    Sur Linux CMake c�est adorable.
    Sur Windows CMake serait adorable si il n� y avait pas ce probl�me, plus un autre les projets install qui ne compile pas,� c�est l�enfer.

  5. #5
    Membre �clair� Avatar de Suryavarman
    Homme Profil pro
    D�veloppeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : D�veloppeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par d�faut
    La solution:

    Ajouter ces lignes apr�s la d�finition de l�ex�cutable:

    Code CMakeLists : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    if(WIN32)
    # https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html?highlight=target_file#genex:TARGET_FILE
    add_custom_command(TARGET GUI POST_BUILD
      COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_RUNTIME_DLLS:Toto::GUI> $<TARGET_FILE_DIR:Toto::GUI>
      COMMAND_EXPAND_LISTS
      )
    endif(WIN32)

    Remarque il ne faut pas utiliser d�Alias dans la ligne :
    Code CMakeLists : S�lectionner tout - Visualiser dans une fen�tre � part
    add_custom_command(TARGET GUI POST_BUILD

    Ex: ne pas utiliser Toto::GUI mais seulement GUI

  6. #6
    Membre �clair� Avatar de Suryavarman
    Homme Profil pro
    D�veloppeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France, H�rault (Languedoc Roussillon)

    Informations professionnelles :
    Activit� : D�veloppeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par d�faut
    Par contre attention. Visual ne compile pas tout le temps le projet LIB. Ce qui nous oblige � lui forcer de recompiler la solution.
    Exemple:
    Modification de la LIB
    Ex�cuter la GUI (depuis Visual cela implique qu�il recompile les projets dont d�pend l�application�mais parfois il ne le fait pas!)
    Pas de chance cette fois-ci LIB n�est pas re-compil� car Visual l�a d�cid� ainsi.

    Quand il ne compile pas LIB, cela provoque: une incoh�rence des symboles de d�bogage et la DLL LIB  n�est pas recopi� � c�t� de l�ex�cutable.

    Ce qui peux provoquer de grandes pertes de temps��pourquoi �a ne fonctionne pas ce que j�ai fait� je ne comprend �a devrait fonctionner�aaaa c�est visual il n�a pas re-compiler LIB�

Discussions similaires

  1. G�rer References sous Visual Studio avec CMake
    Par mestra dans le forum Syst�mes de compilation
    R�ponses: 0
    Dernier message: 21/01/2015, 14h44
  2. [Visual Studio 2005 Debug]Probl�me de debug
    Par Astraya dans le forum Visual Studio
    R�ponses: 1
    Dernier message: 12/02/2009, 10h53
  3. [Visual Studio 2005] : un probl�me incroyable
    Par Patriarch24 dans le forum Visual C++
    R�ponses: 3
    Dernier message: 05/06/2007, 12h21
  4. [Visual Studio .Net 2003]Probl�me d'�dition de liens
    Par Mindiell dans le forum Visual C++
    R�ponses: 10
    Dernier message: 25/05/2007, 23h43
  5. R�ponses: 6
    Dernier message: 08/12/2006, 14h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo