2017-07-08 8 views
0

Comment configurer un projet externe pour télécharger un lien qui n'est pas un fichier .tgz?cmake ExternalProject_Ajouter comment télécharger le fichier URL non-tar?

Par exemple Catch fournit une version qui est une distribution d'en-tête unique. Je voudrais juste télécharger ceci plutôt que le repo de git ou la libération de .tgz. Mais je n'ai pas compris comment dire à CMake de le faire.

Je voudrais faire quelque chose comme:

Include(ExternalProject) 
ExternalProject_Add(
    catch 
    PREFIX ${CMAKE_BINARY_DIR}/catch 
    URL https://github.com/philsquared/Catch/releases/download/v1.9.6/catch.hpp ${CMAKE_BINARY_DIR}/catch 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "" 
    INSTALL_COMMAND "" 
    LOG_DOWNLOAD ON 
) 

Cela échoue comme URL suppose que l'URL est un fichier tar compressé. J'ai essayé plusieurs variantes du DOWNLOAD_COMMAND sans aucun succès non plus.

Répondre

2

Utilisez DOWNLOAD_NO_EXTRACT option ExternalProject_Add:

télécharger juste le fichier et ne pas extraire; le chemin d'accès complet au fichier téléchargé est disponible sous la forme <DOWNLOADED_FILE>.

Exemple de code:

ExternalProject_Add(
    catch 
    PREFIX ${CMAKE_BINARY_DIR}/catch 
    URL https://github.com/philsquared/Catch/releases/download/v1.9.6/catch.hpp 
    DOWNLOAD_NO_EXTRACT 
    CONFIGURE_COMMAND "" 
    BUILD_COMMAND "" 
    INSTALL_COMMAND "" 
    ) 

fichier sera téléchargé dans le répertoire <prefix>/src.


Si l'utilisation l'option LOG_DOWNLOAD aux côtés de DOWNLOAD_NO_EXTRACT, vous avez besoin CMake 3.9 pour fonctionner correctement. Voir ces rapports de bug: https://gitlab.kitware.com/cmake/cmake/issues/16544, https://gitlab.kitware.com/cmake/cmake/issues/17046.

+0

Merci. C'est juste ce que je cherchais. Merci également pour l'astuce à propos de LOG_DOWNLOAD. Le fichier était en cours de téléchargement. Cependant, CMake a échoué après le téléchargement jusqu'à ce que j'éteigne LOG_DOWNLOAD. J'utilisais même CMakeLists 3.8.2. Donc, il semble qu'il pourrait être cassé à nouveau. – Tal

+0

Je viens d'ouvrir ce numéro: https://gitlab.kitware.com/cmake/cmake/issues/17046. – Tal

+1

Suivi du problème CMake. Ceci est corrigé dans CMake 3.9 et il a été corrigé en arrière dans l'arborescence 3.8, donc s'il y a une autre version 3.8 (3.8.3) il devrait aussi y être corrigé. Pour plus d'informations: https://gitlab.kitware.com/cmake/cmake/issues/17046#note_289032 – Tal