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

C++ Discussion :

Installer SQLite3 avec CMAKE sous Windows 10


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 5
    Par défaut Installer SQLite3 avec CMAKE sous Windows 10
    Bonjour,
    Je suis débutant en développement avec CMAKE (mais pas avec C++) sous Windows 10, et je rencontre des difficultés à comprendre un peu le mécanisme.
    Je souhaite en effet utiliser les libs de SQLite3, cependant je ne sais absolument pas comment l'installer.
    Avec par exemple Boost en C++, j'ai pu l'installer avec un .exe, ce qui a permis à CMAKE GUI de le détecter facilement lorsque j'ai ajouté find_package(Boost 1.74.0 REQUIRED) dans le CMakeLists.txt du projet racine.
    Seulement pour SQLite3 il n'y a pas de .exe pour lancer l'installation.

    J'ai vu des posts qui disaient d'inscrire le chemin absolu dans le CMakeLists.txt de l'endroit où on allait mettre la lib SQLite, mais de ce que j'ai compris c'est contraire à la bonne pratique.

    Merci à vous.

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    A priori, si tu disposes d'une version "suffisamment récente" de CMake (supérieure ou égale à la version 3.14... la version actuelle étant la 3.21.3 ), CMake devrait disposer directement des fichiers qui lui permettront de retrouver sqlite s'il est installé à un "endroit habituel" à l'aide de l'instruction "classique" find_package(sqlite3).

    On peut donc considérer que le problème est virtuellement résolu du coté de CMake, pour autant que l'on s'arrange pour installer sqlite "au bon endroit".

    Et le bon endroit, ce sera, en gros :
    • les fichiers d'en-tête dans un sous dossier (nommé sqlite) du dossier include
    • la bibliothèque dans le dossier lib
    • l'exécutable et éventuellement la dll dans le dossier bin


    Pour la suite, hé bien, cela va énormément dépendre de ta configuration personnelle, et, bien entendu, du compilateur (voire de l'EDI) que tu utilises...

    Sauf erreur de ma part, sous VisualStudio, tu dois pouvoir trouver le moyen d'installer sqlite comme "module" et avoir la certitude que tout sera placé "au bon endroit".

    Par contre, si tu utilise MinGW, il va falloir mouiller un peu la chemise, dans le sens où il faudra partir des sources pour l'obtenir et que , manque de bol, les sources la gestion du projet du coté linux (car le makefile destiné à l'usage de visual studio ne nous intéresse pas ici) n'utilise pas CMake, mais les autotools, qui ne sont utilisables sous windows qu'au travers de trucs comme msys.

    Comme je ne sais pas dans quelle situation tu te trouves, je ne vais pas commencer à t'expliquer comment t'y prendre dans les différents cas, cela ferait une réponse beaucoup trop longue pour un bénéfice sommes toutes limité.

    Par contre, si tu as besoin d'une aide plus précise, tu peux toujours venir la demander, en précisant cette fois quel compilateur, voir, quel EDI tu utilises généralement
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 5
    Par défaut
    Merci beaucoup pour ta réponse.

    Alors concernant l'arborescence que j'utilise, je ne trouve pas d'information sur quelle est la "bonne" façon d'agencer le projet, donc j'ai procédé comme suit (que j'ai téléchargé sur le site sqlite):

    • sqlite3
      • sdk
        • include
          • shell.c
          • sqlite3.c
          • sqlite3.h
          • sqlite3ext.h

        • lib
          • sqlite3.def
          • sqlite3.dll


      • sqldiff.exe
      • sqlite3.exe
      • sqlite3_analyzer.exe



    J'ai mis ce dossier dans C:\ directement (je ne sais pas si c'est le bon endroit non plus).

    J'utilise Visual Studio 2019 pour développer. Cependant de ce que j'ai compris, étant donné que CMAKE est destiné à avoir un code portable, j'évite absolument d'avoir de setter des configs à travers l'interface de Visual Studio. Si je dois setter des configs c'est soit à travers CMakeLists.txt, soit directement dans CMAKE GUI. J'ai vu des développeurs qui passaient directement dans les propriétés du projet dans Visual studio pour setter des Path de bibliothèques, mais honnêtement j'ai un doute sur la portabilité et la maintenance de cette manœuvre. C'est aussi la raison pour laquelle je n'installe pas sqlite3 via le gestionnaire de modules de visual studio (idem pour cmake, je génère via l'interface CMAKE GUI).
    Par contre je build via visual studio une fois que tout est en place (clic droit > générer sur le projet).

    Il y a beaucoup de choses que je ne comprends pas encore totalement, d'où peut être certains raisonnements qui peuvent être décousus .
    Est-ce que les explications semblent un peu plus claires?

  4. #4
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 766
    Par défaut
    Citation Envoyé par NicolasRoyer Voir le message
    C'est aussi la raison pour laquelle je n'installe pas sqlite3 via le gestionnaire de modules de visual studio (idem pour cmake, je génère via l'interface CMAKE GUI).
    Pauvre bibliothèque SQLite3

    Je comprends que tu veuilles mettre cette bibliothèque dans "les chemins système" pour la partager entre les projets et ainsi la mettre à jour pour tous les projets en 1 seule fois.
    Mais SQLite3 est très légère : tu mets les fichiers .c/ .h dans ton projet comme ton code (peut-être dans 1 dossier spécifique), c'est fini.
    Il me semble que shell.c n'est pas utile (c'est pour faire 1 ligne de commandes) et sqlite3ext.h c'est pareil (sauf si tu as besoin de trucs spécifiques) : lis la documentation tu verras.

    Pourquoi faire 1 module, 1 bibliothèque dynamique (c'est déjà fait sqlite3.dll) ou je ne sais pas quoi d'autre

    D'ailleurs tu as 1 module CMake FindSQLite3 (<- lien officiel en anglais)
    je ne connais pas CMake donc je ne sais pas comment l'utiliser

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Citation Envoyé par NicolasRoyer Voir le message
    Merci beaucoup pour ta réponse.

    Alors concernant l'arborescence que j'utilise, je ne trouve pas d'information sur quelle est la "bonne" façon d'agencer le projet, donc j'ai procédé comme suit (que j'ai téléchargé sur le site sqlite):

    • sqlite3
      • sdk
        • include
          • shell.c
          • sqlite3.c
          • sqlite3.h
          • sqlite3ext.h

        • lib
          • sqlite3.def
          • sqlite3.dll


      • sqldiff.exe
      • sqlite3.exe
      • sqlite3_analyzer.exe



    J'ai mis ce dossier dans C:\ directement (je ne sais pas si c'est le bon endroit non plus).
    C'est pas mal comme organisation de projet (tu peux juste retirer le fichier shell.c qui n'est pas un fichier d'en-tête du dossier include

    "Tout ce qu'il te reste à faire, alors, c'est d'indiquer (sans doute au travers de la variable SQLITE3_DIR à c:\sqlite3\sdk (tu pourrais aussi remonter tes dossier include et lib d'un cran (et adapter la variable en conséquence, bien sur)

    J'utilise Visual Studio 2019 pour développer.
    Oui, ben, justement: tu devrais, du coup, installer directement sql au travers de visual studio, qui se chargera normalement de gérer lui même ses spécificités se recherche pour CMake

    A priori, une fois que tu as installé la bibliothèque à l'aide du système de gestion des paquets de visual studio, il te suffira d'utiliser la commande find_package(sqlite3) pour que tout se fasse automatiquement. Ca ne sert à rien de se casser la tête pour faire plus compliqué que cela

    (si tu te demande pourquoi je dis "a priori", c'est parce que c'est ce que j'ai en tête du fait de mes souvenirs avec visual studio, mais que je ne suis pas en mesure de le lancer pour l'instant pour confirmer mes dires )


    Citation Envoyé par foetus Voir le message
    Pauvre bibliothèque SQLite3

    Je comprends que tu veuilles mettre cette bibliothèque dans "les chemins système" pour la partager entre les projets et ainsi la mettre à jour pour tous les projets en 1 seule fois.
    Mais SQLite3 est très légère : tu mets les fichiers .c/ .h dans ton projet comme ton code (peut-être dans 1 dossier spécifique), c'est fini.
    Il me semble que shell.c n'est pas utile (c'est pour faire 1 ligne de commandes) et sqlite3ext.h c'est pareil (sauf si tu as besoin de trucs spécifiques) : lis la documentation tu verras.

    Pourquoi faire 1 module, 1 bibliothèque dynamique (c'est déjà fait sqlite3.dll) ou je ne sais pas quoi d'autre

    D'ailleurs tu as 1 module CMake FindSQLite3 (<- lien officiel en anglais)
    je ne connais pas CMake donc je ne sais pas comment l'utiliser
    Oui, mais non...

    On aurait, effectivement, pu se contenter de placer le code source de sqlite dans un sous dossier du projet, et la faire compiler automatiquement comme étant une partie de la solution... s'il avait été possible d'en configurer la compilation à l'aide de CMake.

    Malheureusement, SQLite utilise encore les auto-tools (autoconf, automake, et tout et tout) pour la compilation sous linux et un simple makefile pour la compilation sous windows. Et elle a beau être "relativement légère (en fait, ils on amalgamé une centaine de fichiers sources en un seul grand fichier de ... 235 000 lignes, et un peu plus), il y a malgré tout pas mal d'options qui méritent d'être configurées (même pour une compilation "de base")

    Il y a -- bien sur -- la possibilité de configurer sqlite à l'aide des autotools au travers de cmake, seulement... il faut que les autotools soient disponibles (ce qui signifie compiler sous MSYS, au mieux, ce qui n'est pas forcément une option)

    On en vient donc relativement facilement à l'option qui consiste en la création d'un CMakeLists.txt basé sur les fichiers utilisés par autotools. Cependant, je doute fort que ce soit vraiment aisé pour quelqu'un qui a déjà des problèmes pour faire accepter par CMake le fait que sqlite est installé

    J'ai bien trouvé un script python qui semble permettre d'automatiser le travail ==>ICI<== cependant, comme le projet n'a plus bougé depuis cinq ans, je ne peux pas garantir que nous ne nous retrouvions pas avec des trous qu'il faudrait combler pour que cela marche.

    Bref, tout cela pour dire que je comprends l'envie du P.O de laisser CMake se débrouiller tout seul pour vérifier la présence de cette bibliothèque
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2021
    Messages : 5
    Par défaut
    Merci beaucoup pour vos réponses.

    Alors, j'ai compris quelques petites choses supplémentaires, je vais vous en faire part.
    Donc je développe sous Windows 10, et j'ai donc installé CMAKE GUI.
    J'ai aussi installé la bibliothèque Boost C++ à travers un fichier .exe.
    J'ai ensuite créer un projet vide comme ceci (en gras ce sont les dossiers):

    • HelloWorld
      • build
      • CMakeLists.txt
      • main.cpp


    Voici le contenu des fichiers:

    CMakeLists.txt
    Code CMakeLists : 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
    cmake_minimum_required(VERSION "3.20.6")
     
    project("HelloWorld")
     
    add_executable("${PROJECT_NAME}" "main.cpp")
     
    install(TARGETS "${PROJECT_NAME}" DESTINATION bin) 	#${CMAKE_INSTALL_PREFIX}/bin
    install(FILES "main.cpp" DESTINATION src) 			#${CMAKE_INSTALL_PREFIX}/src
     
    # Get Boost Library
    find_package(Boost 1.74.0 REQUIRED COMPONENTS date_time filesystem iostreams)
    target_link_libraries("${PROJECT_NAME}" Boost::date_time Boost::filesystem Boost::iostreams)
     
    # Just some tests
    include(CTest)
    add_test("test1" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}")
     
    include (CPack)

    Ensuite dans le fichier main.cpp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include <boost/lambda/lambda.hpp>
    #include <iostream>
    #include <iterator>
    #include <algorithm>
     
    int main()
    {
        using namespace boost::lambda;
        typedef std::istream_iterator<int> in;
     
        std::for_each(
            in(std::cin), in(), std::cout << (_1 * 3) << " ");
    }
    Il s'agit donc d'un code très simple pour le moment qui va utiliser la bibliothèque Boost pour multiplier par 3 les inputs.

    Cependant, avant d'en arriver là, il faut lancer le soft CMAKE GUI pour pouvoir compiler générer le projet (donc ici HelloWorld).
    Sur CMAKE GUI je définis le PATH du code SOURCE, puis le PATH pour les BINAIRES une fois compilés (donc ici HelloWorld/build).

    Une fois qu'on a décidé des PATH, on va cliquer sur "Générer", ce qui va nous ouvrir une boite de dialogue afin de choisir sur quel IDE le projet sera généré.
    Je choisis Visual Studio 2019 et je clique sur générer ensuite. Ca va me générer les fichiers .sln afin que je puisse commencer à développer/débugger etc... sous Visual Studio.
    De plus l'interface CMAKE GUI m'indique toutes les variables CMAKE utilisées et qui sont apparues lorsqu'on a cliqué sur le bouton "Configure".

    Pour rappel le bouton "Configure" va prendre le contenu de CMakeLists.txt et va tenter de trouver les librairies pour chaque ligne "find_package" afin de pouvoir les utiliser dans notre projet.

    Donc là tout est bon, on a bien toutes nos libs bien placées avant de lancer Visual Studio, ce que je pense être une bonne pratique.

    Ensuite c'est là où ca se gâte: étant donné qu'il n'y a pas de .exe pour sqlite qui permette de l'installer sous Windows, on a directement des fichiers .c, .h et des .exe (.exe qui ne sont pas des fichiers d'installation mais des des invites de commandes avec sqlite). Et lorsque j'utilise la commande dans CMakeLists.txt:
    Code CMakeLists : Sélectionner tout - Visualiser dans une fenêtre à part
    find_package (SQLite3 REQUIRED)
    Lorsque je génère sous CMAKE GUI, j'ai le message d'erreur suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Could NOT find SQLite3 (missing: SQLite3_INCLUDE_DIR SQLite3_LIBRARY)
    Voici une capture d'écran de CMAKE GUI:
    Nom : cmake error.png
Affichages : 718
Taille : 56,2 Ko

    Le problème est que:
    • Je ne connais pas l'emplacement par défaut de l'installation de cette lib sqlite.
    • Je ne peux pas inscrire le PATH dans le CMakeLists.txt car ce n'est pas une bonne pratique.
    • Je ne peux pas utiliser SQLite à travers Visual Studio car la lib doit être trouvée avant de lancer Visual Studio (étant donné que ça se fait lors de la génération sous CMAKE GUI) - Je sais je suis têtu .



    Déjà une question que je me pose: est-ce que le projet peut contenir plusieurs fichier CMakeLists.txt? Si oui est-ce qu'il doit y en avoir un dans chaque sous dossier?

    Sinon j'ai effectivement trouvé cette page pour findSQLite3 avec CMAKE:
    https://cmake.org/cmake/help/latest/...ndSQLite3.html

    Mais honnêtement je ne comprends absolument rien à son utilisation car il n'y a pas grand chose sur la page .

    En espérant avoir été assez clair dans mes interrogations?

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/01/2014, 21h26
  2. Réponses: 1
    Dernier message: 21/05/2009, 14h23
  3. Réponses: 2
    Dernier message: 27/10/2008, 13h49

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