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

Systèmes de compilation Discussion :

[CMake] bloqué par try_compile


Sujet :

Systèmes de compilation

  1. #1
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut [CMake] bloqué par try_compile
    Bonjour tout le monde !

    J'essaie de me mettre à CMake, après une décénie d'autoconf/automake, lassé par le coté POSIX-only de ce sytème. Et bien évidemment, je rencontre des problèmes.

    J'ai un programme qui utilise le TR1 en partie. C'est mon premier problème - parce que dans un evironnement gcc/g++, le TR1 est situé dans un répertoire à part entière, et les headers sont accessibles via <tr1/cstdint> (par exemple) ; et bien évidemment, dans un environnement Visual C++, le TR1 est placé à la racine des répertoires include (donc le même fichier est accessible via <cstdint>). Du coup, il me faut faire la distinction.

    Je peux la mettre en dur dans mon CMakeLists.txt, mais ce n'est pas très joli. J'aurais aimé laisser cmake découvrir l'emplacement du TR1. Du coup, je me suis dit : ça, c'est un job pour try_compile().

    Mais je n'arrive pas à l'utiliser.

    Mon "code":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SET(CHECKFILE ${PROJECT_BINARY_DIR}/check/check.cpp)
    FILE(WRITE ${CHECKFILE} "#include <cstdint>\nint main() { }")
    TRY_COMPILE(HAS_CSTDINT check ${CHECKFILE})
    Ca me semble suffisamment simple pour ne pas prêter à confusion, mais cmake échoue de manière systématique à effectuer correctement la tâche confiée.

    Le message renvoyé par cmake --debout-output --debug-trycompile ../.. (je précise que le générateur est Visual Studio 10, et que je suis dans le "visual studio command prompt" ; le compilateur est trouvé comme un grand, de même que les headers, les librairies, etc).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    CMake Error: The source directory "check/CMakeFiles/CMakeTmp" does not exist.
    Specify --help for usage, or press the help button on the CMake GUI.
       Called from: [1]     C:/Personnel/Projets/temp/ekogen-0.3/CMakeLists.txt
    CMake Error: Internal CMake error, TryCompile configure of cmake failed
       Called from: [1]     C:/Personnel/Projets/temp/ekogen-0.3/CMakeLists.txt
    C'est super agaçant, au bout d'un moment. Je suis incapable d'en savoir plus (même avec --debug-trycompile ; je pensais que c'était fait pour...).

    Est-ce que quelqu'un a déjà rencontré ce problème et/ou sais comment en venir à bout ? J'aimerais vraiment comprendre ce qui se passe, parce que j'ai plusieurs tests similaires à implémenter pour découvrir les features de l'environnement de développement.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    J'auto-répond à mon post. Je sais que ce n'est pas fameux mais bon...

    J'ai trouvé une solution : ne pas utiliser try_compile. Cmake est livré en standard avec plusieurs modules, et deux modules en particulier ont attiré mon attention : CheckCXXSourceCompiles et CheckIncludeFileCXX.

    Du coup, mon code de test est maintenant :

    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
    37
    38
     
    # check for <cstdint> or <tr1/ctsdint>
    check_include_file_cxx(cstdint ekogen_HAS_CSTDINT)
    if (ekogen_HAS_CSTDINT)
        message("** using <cstdint>")
        set (ekogen_CSTDINT "<cstdint>")
        check_cxx_source_compiles("#include <cstdint>\nint main() { std::tr1::uint32_t n; }" ekogen_HAS_TR1_TYPES)
    else (ekogen_HAS_CSTDINT)
        check_include_file_cxx(tr1/cstdint ekogen_HAS_TR1_CSTDINT)
        if (ekogen_HAS_TR1_CSTDINT)
            message("** using <tr1/cstdint>")
            set (ekogen_CSTDINT "<tr1/cstdint>")
            check_cxx_source_compiles("#include <tr1/cstdint>\nint main() { std::tr1::uint32_t n; }" ekogen_HAS_TR1_TYPES)
        endif (ekogen_HAS_TR1_CSTDINT)
    endif (ekogen_HAS_CSTDINT)
     
    #if we don't have <cstdint> or <tr1/cstdint>, we're screwed :/
    if ((NOT ekogen_HAS_CSTDINT) AND (NOT ekogen_HAS_TR1_CSTDINT))
        message (FATAL_ERROR, "you need a system with support for <cstdint> or <tr1/cstdint>")
    endif ()
     
    if (NOT ekogen_HAS_TR1_TYPES)
        if (ekogen_HAS_CSTDINT)
            check_cxx_source_compiles("#include <cstdint>\nint main() { std::uint32_t n; }" ekogen_HAS_TR1_TYPES_IN_STD)
        else (ekogen_HAS_CSTDINT)
            check_cxx_source_compiles("#include <tr1/cstdint>\nint main() { std::uint32_t n; }" ekogen_HAS_TR1_TYPES_IN_STD)
        endif (ekogen_HAS_CSTDINT)
    endif()
     
    if (ekogen_HAS_TR1_TYPES)
        message ("** std::tr1 contains the predefined sized inteter types")
        set (ekogen_STDINT_NAMESPACE std::tr1)
    elseif (ekogen_HAS_TR1_TYPES_IN_STD)
        message ("** std contains the predefined sized inteter types")
        set (ekogen_STDINT_NAMESPACE std)
    else ()
        message (FATAL_ERROR, "standard integer types are not found ; are your sure youre using a C++ compiler?")
    endif ()
    Et ça marche super bien ! (bon, faut que je le teste sous Linux et sous mac ; mais je n'ai pas de mac... :-/)
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme d'enregistrement bloqué par utlisateur !
    Par FilipeVV dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/03/2006, 14h32
  2. Etat bloqué par une table
    Par aujero dans le forum Access
    Réponses: 4
    Dernier message: 06/02/2006, 17h53
  3. Disque dur bloqué par DriveLock !!!!
    Par Celia1303 dans le forum Composants
    Réponses: 2
    Dernier message: 22/11/2005, 18h02
  4. bloqué par cookie
    Par kidu dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 19/08/2005, 09h59
  5. Site sur CD - javascript bloqué par SP2
    Par loutente dans le forum Général Conception Web
    Réponses: 16
    Dernier message: 17/05/2005, 14h22

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