web-dev-qa-db-fra.com

cmake - CMakeLists.txt n'est pas dans le dossier racine (mais est inclus dans le source)

J'essaie de compiler une bibliothèque libpng. Le problème, c’est que j’ai besoin d’une version spécifique de cette bibliothèque - 1.2.37 - car le projet dans lequel je l’utilise est écrit avec cette version ..__J'ai trouvé le code source de cette version ici (Projet GnuWin32).

Mais la structure du dossier ressemble à ceci:

libpng-1.2.37-src/
   contrib/
   projects/
   scripts/
      CMakeLists.txt
   png.h
   pngread.c
   pngwrite.c
   ...

Voir, le CMakeLists.txt est un niveau plus profond que les fichiers source.

J'ai essayé:

  1. le répertoire source libpng-1.2.37-src/ -> a généré l'erreur: le répertoire source ne semble pas contenir CMakeLists.txt
  2. le répertoire source libpng-1.2.37-src/scripts -> a généré plusieurs erreurs: Le fichier libpng-1.2.37-src/scripts/scripts/libpng.pc.in n'existe pas.
  3. copier CMakeLists.txt de / scripts vers /libpng-1.2.37-src et définir le répertoire source sur /libpng-1.2.37-src -> a provoqué l'erreur: La source " /libpng-1.2.37-src/CMakeLists.txt "ne correspond pas à la source" /libpng-1.2.37-src/scripts/CMakeLists.txt "utilisé pour générer le cache.

Que dois-je faire pour que cela fonctionne? Je ne sais pas pourquoi le fichier CMakeLists.txt serait inclus s'il ne pouvait pas être utilisé.

7
dvdkouril

Le fichier INSTALL dit explicitement:

If you want to use "cmake" (see www.cmake.org), copy CMakeLists.txt
from the "scripts" directory to this directory and type

   cmake . [-DPNG_MMX=YES] -DCMAKE_INSTALL_PREFIX=/path
   make
   make install

Et comme note de côté, avant cela, il est dit que la manière classique de l’installer est:

On Unix/Linux and similar systems, you can simply type

    ./configure [--prefix=/path]
    make check
    make install

On dirait que vous avez bien fait avec 3), cependant vous avez oublié de nettoyer le répertoire de compilation avant de réessayer.

5
Silex

Si c'est la bibliothèque que vous utilisez dans votre projet, vous pouvez la construire automatiquement via une technique appelée 'superbuild' (utilisez ExternalProject_Add). En spécifiant SOURCE_SUBDIR comme décrit ici dans le sous-répertoire avec CMakeLists.txt, vous pouvez faire quelque chose comme cela

  ExternalProject_Add(libpng
  GIT_REPOSITORY    url-to-your-repository.git
  GIT_TAG           v1.2.37
  SOURCE_SUBDIR     "scripts"
0
Vaclav P.