2015-04-23 9 views
7

ich nur meine CMake ab Version seiner 2.8-3.2Nicht unterstütztes Protokoll, während Download tar.gz Paket

Sein Arbeits Charme in CMake 2.8 aber nach Upgrade fehlschlagen.

Ich versuche, Third-Party-Bibliothek mit ExternalProject_Add() CMake-Funktion zu bauen.

ExternalProject_Add(
    luacov 
    URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz 
    DOWNLOAD_DIR ${EXTERNAL_PROJECT_DOWNLOAD_DIR} 
    CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE} 
    SOURCE_DIR ${EXTERNAL_PROJECT_SRC_DIR}/luacov 
    BINARY_DIR ${EXTERNAL_PROJECT_BUILD_DIR}/luacov 
    UPDATE_COMMAND "" 
    PATCH_COMMAND "" 
) 

Meine Beobachtung:

  1. Mit GIT_REPOSITORY Option, ExternalProject_Add() erlauben http und https Protokoll externes Projekt zum Download bereit.
  2. Verwenden Sie URL Option, ExternalProject_Add() nur http zulassen, aber nicht https Protokoll zum externen Projekt herunterladen.

PROBLEM:

Gibt es eine Möglichkeit externes Projekt zum Herunterladen und bauen https-Protokoll?

ERROR:

[ 16%] Performing download step (download, verify and extract) for 'luacov' 
-- downloading... 
src='https://github.com/keplerproject/luacov/archive/v0.7.tar.gz' 
dst='/home/build/my_build/external_projects/downloads/v0.7.tar.gz' 
timeout='none' 
CMake Error at /home/build/my_build/luacov-prefix/src/luacov-stamp/download-luacov.cmake:21 (message): 
error: downloading 
'https://github.com/keplerproject/luacov/archive/v0.7.tar.gz' failed 

status_code: 1 
status_string: "Unsupported protocol" 
log: Protocol "https" not supported or disabled in libcurl 

Closing connection -1 

make[3]: *** [luacov-prefix/src/luacov-stamp/luacov-download] Error 1 
make[2]: *** [CMakeFiles/luacov.dir/all] Error 2 
make[1]: *** [CMakeFiles/luacov.dir/rule] Error 2 
make: *** [luacov] Error 2 

Antwort

2

In meinem ExternalProject_Add() habe ich verwenden GIT_REPOSITORY von URL Option insted.

#URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz 
GIT_REPOSITORY https://github.com/keplerproject/luacov.git 

Und luacov herunterladen und erfolgreich erstellen.

Für alle https Protokoll verwenden DOWNLOAD_COMMAND Option ExternalProject_Add() Funktion.

DOWNLOAD_COMMAND wget https://github.com/keplerproject/luacov/archive/v0.7.tar.gz 

und es funktioniert wie erwartet.

Danke.

+2

Wie extrahieren Sie das Archiv, wenn Sie 'DOWNLOAD_COMMAND' verwenden? Beim Herunterladen über URL geschieht dies automatisch, aber dies scheint nicht der Fall zu sein, wenn Sie es auf diese Weise tun. – heine

1

Sieht aus wie mit CMake 3.2.1 es wie erwartet funktioniert.

Hier ist mein Beispielprojekt/CMakeLists.txt:

PROJECT(TestDownload) 

SET(CMAKE_CXX_COMPILER "/path/to/bin/g++") 
SET(CMAKE_C_COMPILER "/path/to/bin/gcc") 

SET(CMAKE_CXX_FLAGS "") 
SET(CMAKE_C_FLAGS "") 

cmake_minimum_required(VERSION 3.2) 
include(ExternalProject) 

ExternalProject_Add(
    luacov 
    URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz 
    DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/luacov 
    UPDATE_COMMAND "" 
    PATCH_COMMAND "" 
    INSTALL_COMMAND "" 
) 

Und die Befehle:

$ cd project 
$ mkdir build && cd build 
$ cmake .. 
... 
$ make all 
Scanning dependencies of target luacov 
[ 12%] Creating directories for 'luacov' 
[ 25%] Performing download step (download, verify and extract) for 'luacov' 
-- downloading... 
    src='https://github.com/keplerproject/luacov/archive/v0.7.tar.gz' 
    dst='/tmp/project/build/luacov/v0.7.tar.gz' 
    timeout='none' 
-- [download 7% complete] 
-- [download 21% complete] 
-- [download 76% complete] 
-- [download 100% complete] 
-- downloading... done 
-- verifying file... 
    file='/tmp/project/build/luacov/v0.7.tar.gz' 
-- verifying file... warning: did not verify file - no URL_HASH specified? 
-- extracting... 
    src='/tmp/project/build/luacov/v0.7.tar.gz' 
    dst='/tmp/project/build/luacov-prefix/src/luacov' 
-- extracting... [tar xfz] 
-- extracting... [analysis] 
-- extracting... [rename] 
-- extracting... [clean up] 
-- extracting... done 
[ 37%] No patch step for 'luacov' 
[ 50%] No update step for 'luacov' 
... 
+0

Danke und +1 für Ihre Antwort. Ich befolge die gleichen Schritte, die du als Antwort erwähnt hast. Aber immer noch vor dem Fehler, den ich in meiner Frage unter dem 'EDIT'-Tag aktualisiert habe. –

+3

Hm, das ist ein anderes Geschäft. Ich weiß nicht, ob es noch stimmt, aber hier ist, was sie sagen (http://www.cmake.org/pipermail/cmake/2010-December/041295.html): '' 'CMake baut seine eigene Curl, ohne SSL-Unterstützung standardmäßig, es sei denn, Sie zeigen es auf das System curl. Sie können CMake mit dem CMAKE_USE_OPENSSON ON neu erstellen, wenn Sie alle die richtigen unterstützenden Systembibliotheken installiert haben.''' – dekkard

2

Ich hatte das gleiche Problem beim Erstellen einer Bibliothek in einem Computer, in dem CMake keine Unterstützung für https-Protokoll hatte.

Ich musste cmake selbst mit der Option -DMAKE_USE_OPENSSL = ON bauen, wie von @ dekkards Kommentar vorgeschlagen.

8

Das Problem kann sein, dass die mit CMake gelieferte CURL-Bibliothek standardmäßig nicht mit SSL-Unterstützung erstellt wird.Ich musste Cmake kompilieren mit:

./bootstrap --system-curl 
make 
sudo make install 

... und das hat funktioniert, weil mein System hat Curl SSL-Unterstützung.

8

Was es für mich gearbeitet ist folgende:

  1. aktualisieren openssl

    sudo apt-get install openssl libssl-dev 
    
  2. Bootstrap-Datei ändern CMAKE_USE_OPENSSL zu aktivieren. Ersetzen Sie diese line von:

    cmake_options="-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON" 
    
  3. Run Bootstrap-Skript normalerweise in Cmake Ordner

    /@path_to_cmake/bootstrap 
    
+0

Die Zeilennummer ist veraltet. Welche Linie ist es jetzt? –

+0

Wenn die Zeile nubmer nicht übereinstimmt, dann suche nach cmake_options in der Datei – infoclogged

+0

. Die Installation von 'libssl-dev' war genug für mich. (Ubuntu 16.04) Wenn OpenSSL und 'libssl-div' installiert sind, wird CMake mit SSL-Unterstützung erstellt. Es ist nicht erforderlich, die Bootstrap-Datei zu bearbeiten oder sie manuell in der Befehlszeile anzugeben. – Farway

1

Für CMake 3.8.0 arbeitete für mich:

  1. Install/Update openssl:

    yum install openssl openssl-devel 
    
  2. Passen Sie die Lösung aus einer CMake forum reply von Brad King:

    ./configure --prefix=/software/cmake-3.8.0/ --parallel=${NPROC} -- \ 
        -/DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_USE_OPENSSL:BOOL=ON 
    make -j ${NPROC} 
    make install 
    
  3. Viel Spaß!

+0

Danke für die Antwort. +1 für andere Option. –

Verwandte Themen