2017-05-05 9 views
1

私のプロジェクトで使用するにはzlibをダウンロードする必要があります。 私はexternlproject_add()を使ってすべてのzlibリポジトリをダウンロードし、ビルドしてインストールします。 その後、zlibリポジトリの一部であるlib:minizipをインストールします。externalproject_add()の後にadd_subdirectoryを追加する方法は?

この依存関係をcmakeに設定するにはどうすればよいですか?

のzlibモジュール:

cmake_minimum_required (VERSION 2.8.7) 
include (ExternalProject) 

if(UNIX) 
# An external project for zlib 

SET (GIT_URL https://github.com/madler/zlib.git) 
SET (ZLIB_INSTALL ${CMAKE_CURRENT_BINARY_DIR}) 
SET (ZLIB_INCLUDE ${CMAKE_BINARY_DIR}/include/zlib) 
SET (ZLIB_STATIC ${CMAKE_BINARY_DIR}/lib/libz.a) 
SET (MINIZIP_DIR ${CMAKE_CURRENT_BINARY_DIR}/ZLIB/src/ZLIB/contrib/minizip) 

ExternalProject_Add(zlib  
    PREFIX zlib  
    GIT_REPOSITORY ${GIT_URL}  
    INSTALL_DIR ${ZLIB_INSTALL}  
    PATCH_COMMAND ${CMAKE_COMMAND} -E remove <SOURCE_DIR>/zconf.h  
    BUILD_IN_SOURCE 1  
    PATCH_COMMAND ""  
    CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR> --includedir=${ZLIB_INCLUDE}  
) 

find_package(ZLIB REQUIRED) 
if(ZLIB_FOUND) 
     add_subdirectory (${MINIZIP_DIR}) 
endif(ZLIB_FOUND) 

SET (ZLIB_INCLUDE_DIR ${ZLIB_INSTALL}/include/zlib) 
SET (ZLIB_LIBRARY "${ZLIB_INSTALL}") 
ADD_LIBRARY (ZLIB_LIB STATIC IMPORTED DEPENDS zlib) 
SET_TARGET_PROPERTIES (ZLIB_LIB PROPERTIES IMPORTED_LOCATION "${ZLIB_STATIC}") 

endifは(UNIX)このzlibのモジュールで

私がエラーを持って、そのディレクトリ以下の

/ホーム/ LAIS/Imagens /エージェント/構築/ ZLIB/src/ZLIB/contrib/minizip

私はまだ実行していません

cmakeの。..

そして、それは本当です。まだ存在しません。私はそれをcmakeに伝えるべきです。しかし、私はそれを行う方法を知らない。

+0

'find_package'が' ExternalProject_Add'を介してZLIBインストールを見つけたら、あなたは**間違っています**。 'find_package'が実行されるとき(* configuration * stage)、' zlib'ソースもダウンロードされません。例えば、 [この質問](http://stackoverflow.com/questions/6351609/cmake-linking-to-library-download-from-externalproject-add)または[その1](http://stackoverflow.com/questions/17446981)/cmake-externalproject-add-and-findパッケージ)。 'add_subdirectory'と同じ問題です。 – Tsyvarev

+0

'add_subdirectory'の代わりに' ExternalProject_Add'手段を使ってminizipを作成することはあなたの目的に合っていますか? – Tsyvarev

+0

zlibプロジェクトにはCMakeLists.txtファイルがありますので、[こちら](http://stackoverflow.com/a/31622855/1938798)に記載されている方法と同様の方法でビルドに反映させることもできます。その後、ライブラリなどを手動で定義する必要はなく、プロジェクトをスーパービルドに変換する必要はありません。 –

答えて

0

minizipを持つzipファイルをダウンロードしました。

cmake_minimum_required (VERSION 2.8.7) 
include (ExternalProject) 

project (zlib) 

if(UNIX) 
    # An external project for zlib 
    SET (URL http://www.winimage.com/zLibDll/unzip101e.zip) 
    SET (MINIZIP_INSTALL ${CMAKE_CURRENT_BINARY_DIR}) 
    SET (MINIZIP_STATIC ${CMAKE_BINARY_DIR}/lib/minizip.a) 
    message ("zlib = ${zlib}") 
    ExternalProject_Add(minizip 
    DEPENDS zlib  
    PREFIX minizip  
    URL ${URL}  
    INSTALL_DIR ${MINIZIP_INSTALL} 
    BUILD_IN_SOURCE make  
    CONFIGURE_COMMAND "" 
) 

    SET (MINIZIP_LIBRARY "${MINIZIP_INSTALL}") 
    ADD_LIBRARY (MINIZIP_LIB STATIC IMPORTED DEPENDS minizip, zlib) 
    SET_TARGET_PROPERTIES (MINIZIP_LIB PROPERTIES IMPORTED_LOCATION "${MINIZIP_STATIC}") 
endif(UNIX) 
関連する問題