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

Bibliothèques Discussion :

[cmake] set_source_files_properties ne marche pas pour qdbusxml2cpp


Sujet :

Bibliothèques

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Points : 45
    Points
    45
    Par défaut [cmake] set_source_files_properties ne marche pas pour qdbusxml2cpp
    Bonjour,

    Dans mon cmakelists.txt, je fais un qt4_add_dbus_interface pour que le make créée l'interface qtdbus correspondant à mon xml "configurationmanager-introspec.xml".

    Je veux ajouter un #include "metatypes.h" à mon .h généré.

    Ca marche en faisant qdbusxml2cpp -i metatypes.h, mais pour le faire avec le cmakelists.txt, il parait qu'il faut utiliser set_source_files_properties. Donc je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    set(configurationmanager_xml ${CMAKE_CURRENT_SOURCE_DIR}/dbus/configurationmanager-introspec.xml)
     
    set_source_files_properties(
       ${configurationmanager_xml}
       PROPERTIES 
       INCLUDE "metatypes.h") 
     
    qt4_add_dbus_interface(
       appli_kde_SRCS 
       ${configurationmanager_xml}
       configurationmanager_interface)
    J'ai aussi essayé avec COMPILE_FLAGS "-i metatypes.h" au lieu de INCLUDE "metatypes.h". Mais ca ne change rien du tout. Le configurationmanager_interface.h est généré mais en haut, c'est écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    * This file was generated by qdbusxml2cpp version 0.7
     * Command line was: qdbusxml2cpp -m -p configurationmanager_interface /home/bla/bla/dbus/configurationmanager-introspec.xml
    Ca n'a pas ajouté le -i metatypes à la ligne de commande!
    Est-ce que j'aurais oublié une étape?

    Merci

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Je ne connais pas du tout qdbusxml2cpp mais je suis sûr que ce n'est pas CMake qui te permettra de modifier ton fichier de référence.

    COMPILE_FLAGS sert à spécifier des flags supplémentaires de compilation, dans ton cas, -I indiquerait juste où trouver un header (mais pas à l'ajouter dans le fichier). Quand à la propriété INCLUDE, je n'en ai jamais entendu parler.

    J'ai regardé un peu le code CMake. La macro qui semble contenir l'option -i se nomme QT4_ADD_DBUS_ADAPTOR.

    Je dirais donc quelque chose comme

    qt4_add_dbus_adaptor (
    appli_kde_SRCS
    ${configurationmanager_xml}
    metatypes.h
    ?
    ?
    )
    mais à toi de voir...

    macro QT4_ADD_DBUS_ADAPTOR(outfiles xmlfile parentheader parentclassname [basename] )
    create a dbus adaptor (header and implementation file) from the xml file
    describing the interface, and add it to the list of sources. The adaptor
    forwards the calls to a parent class, defined in parentheader and named
    parentclassname. The name of the generated files will be
    <basename>adaptor.{cpp,h} where basename is the basename of the xml file.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    Je teste ca demain, mais c'est quand meme bizarre pcq dans pas mal de sites j'ai vu mon exemple...

    http://www.nabble.com/KDE-kdelibs-td22047139.html

    http://lists.kde.org/?l=kde-commits&...2093406900&w=2

    Par exemple...

    Dans le premier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    set_source_files_properties(${kcookiejar_XML} PROPERTIES INCLUDE "${CMAKE_CURRENT_SOURCE_DIR}/../kioslave/http/kcookiejar/kcookiejar_include.h")
    +qt4_add_dbus_interface(khtml_LIB_SRCS ${kcookiejar_XML} kcookiejar_interface)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    Voici le code actuel de la macro QT4_ADD_DBUS_INTERFACE.
    Comme tu peux voir à la ligne 8, l'option -i n'est pas positionné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
      MACRO(QT4_ADD_DBUS_INTERFACE _sources _interface _basename)
        GET_FILENAME_COMPONENT(_infile ${_interface} ABSOLUTE)
        SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
        SET(_impl   ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
        SET(_moc    ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc)
     
        ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header}
            COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} -m -p ${_basename} ${_infile}
            DEPENDS ${_infile})
     
        SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE)
     
        QT4_GENERATE_MOC(${_header} ${_moc})
     
        SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc})
        MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc})
     
      ENDMACRO(QT4_ADD_DBUS_INTERFACE)
    En fait, ils ont réécrit la macro chez KDE, ce qui donne bien ce que tu veux.
    Et tu avais raison pour la propriété INCLUDE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
      MACRO(QT4_ADD_DBUS_INTERFACE _sources _interface _basename)
        GET_FILENAME_COMPONENT(_infile ${_interface} ABSOLUTE)
        SET(_header ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.h)
        SET(_impl   ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.cpp)
        SET(_moc    ${CMAKE_CURRENT_BINARY_DIR}/${_basename}.moc)
     
        GET_SOURCE_FILE_PROPERTY(_nonamespace ${_interface} NO_NAMESPACE)
        IF ( _nonamespace )
            SET(_params -N -m)
        ELSE ( _nonamespace )
            SET(_params -m)
        ENDIF ( _nonamespace )
     
        GET_SOURCE_FILE_PROPERTY(_classname ${_interface} CLASSNAME)
        IF ( _classname )
            SET(_params ${_params} -c ${_classname})
        ENDIF ( _classname )
     
        GET_SOURCE_FILE_PROPERTY(_include ${_interface} INCLUDE)
        IF ( _include )
            SET(_params ${_params} -i ${_include})
        ENDIF ( _include )
     
        ADD_CUSTOM_COMMAND(OUTPUT ${_impl} ${_header}
            COMMAND ${QT_DBUSXML2CPP_EXECUTABLE} ${_params} -p ${_basename} ${_infile}
            DEPENDS ${_infile})
     
        SET_SOURCE_FILES_PROPERTIES(${_impl} PROPERTIES SKIP_AUTOMOC TRUE)
     
        QT4_GENERATE_MOC(${_header} ${_moc})
     
        SET(${_sources} ${${_sources}} ${_impl} ${_header} ${_moc})
        MACRO_ADD_FILE_DEPENDENCIES(${_impl} ${_moc})
     
      ENDMACRO(QT4_ADD_DBUS_INTERFACE)
    Si tu développes un produit KDE, tu aurais peut-être intérêt à t'appuyer sur leurs modules et non ceux de CMake...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    Ca veut dire quoi? Que j'utilise pas la bonne macro? Parce que j'ai ajouté FindKDE4.cmake dans le cmakelists.txt et ca change rien.
    Elle est dans quel module cette macro?

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    En effet dans findQt4.cmake j'ai la première que tu as donnée. Mais comment est-ce que je change ca?

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    La seconde macro est dans les sources de KDE4.
    Soit tu te mets dans l'espace de développement de KDE, soit tu mets le module FindQt4 de KDE dans ton espace à toi. Il remplacera celui de CMake.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    Qu'est-ce que tu entends par "se mettre dans l'espace de développement de kde"?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069
    Par défaut
    En fait, je n'ai aucune idée de ce que tu fais...
    Je penche donc pour la seconde possibilité. Tu récupères le fichier FindQt4.cmake de KDE. Tu le mets dans un des répertoires de ton projet, genre cmake et tu positionnes la variable CMAKE_MODULE_PATH à ${PROJECT_SOURCE_DIR}/cmake. Ainsi, le premier module Qt4 qui sera pris en compte sera celui de KDE et non plus celui de CMake.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 112
    Points : 45
    Points
    45
    Par défaut
    OK je ne sais pas si ca vaut le coup de récupérer les sources de kde juste pour une fonction, donc je vais me faire mon propre FindQt4 en recopiant la fonction que tu as donnée. Mais si tu l'as sous la main, je dis pas non.
    Merci beaucoup en tout cas!

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Points : 1 069
    Points
    1 069

Discussions similaires

  1. to_date() marche pas pour moi
    Par hichcasa dans le forum SQL
    Réponses: 10
    Dernier message: 14/11/2008, 17h41
  2. script slide ne marche pas pour export vers.8
    Par hlcginfo dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 09/09/2008, 19h26
  3. Mon Backoffice ne marche pas pour update et delete ?
    Par vascoII dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 17/07/2008, 23h23
  4. Réponses: 3
    Dernier message: 16/02/2007, 15h35
  5. FileGetAttr ne marche pas pour les dossiers ?
    Par WebPac dans le forum Delphi
    Réponses: 13
    Dernier message: 06/07/2006, 14h36

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