2017-07-08 13 views
1

gakeubリポジトリからの外部プロジェクトとして、cmake-basedプロジェクトのライブラリvlc-qtをインクルードしようとしています。実行方法ビルド段階でのみcmake :: find_package

プロジェクトが推奨される方法を使用しています:あなたはライブラリがその瞬間上に構築されていないことを確認して

FIND_PACKAGE(VLCQt REQUIRED COMPONENTS Widgets) 

cmakeのは、構成段階で次のコマンドを実行します。

これを回避する正しい方法は何ですか?

+0

[ExternalProject_Add](https://cmake.org/cmake/help/v3.7/module/ExternalProject.html)を介して外部プロジェクトを含めるので、メインプロジェクトのビルド時に設定されます。 – Tsyvarev

+0

私はまさしくこれをやっていますが、設定時に検索パッケージを実行しようとしています – amigo421

+0

外部プロジェクトが*設定されている場合に**必要な図書館員が必要です**。代わりに**手動で**(つまり、 'FindVLCQt.cmake'スクリプトなしで)すべての* CACHE *変数を埋めてください。しかし、このアプローチでは、スクリプト内部の知識が必要であり(ドキュメンテーションが不十分です)、一部のパッケージでは機能しない可能性があります。 – Tsyvarev

答えて

2

自分のプロジェクトとVLCQtプロジェクトをExternalProject_Addという外部プロジェクトに置き、最上位のCMakeLists.txtファイルを作成して順番にビルドします。

あなたのディレクトリ構造は次のようになります。最終的にはその後

ExternalProject_Add(my_project 
    DEPENDS vlcqt 
    SOURCE_DIR ${CMAKE_SOURCE_DIR}/MyProject 
    CMAKE_ARGS 
     ${GLOBAL_THIRDPARTY_LIB_ARGS} 
     -DCMAKE_INSTALL_PREFIX=${EXT_INSTALL_PATH}/my_project 
    BUILD_COMMAND make 
) 

ProjectRoot/CMakeLists.txt

set(VLCQT_ROOT ${EXT_INSTALL_PATH}/vlcqt CACHE INTERNAL "") 

ExternalProject_Add(vlcqt 
    URL "http://url.of.source/release.0.1.tar.gz" 
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${VLCQT_ROOT} 
    INSTALL_COMMAND make install 
) 

list(APPEND GLOBAL_THIRDPARTY_LIB_ARGS "-DVLCQT_ROOT:PATH=${VLCQT_ROOT}") 

ProjectRoot/modules/MyProject.cmakeは次のようになります。同じよう

ProjectRoot/ 
|-- CMakeLists.txt 
|-- MyProject/ 
| |-- sources/ 
| `-- CMakeLists.txt 
`-- modules/ 
    |-- MyProject.cmake 
    `-- ExternalVLCQt.cmake 

ProjectRoot/modules/ExternalVLCQt.cmakeが見えるかもしれませんフォローを含むべきであるng:

cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) 
project(MyProject VERSION 0.1) 

set(CMAKE_MODULE_PATH 
    "${CMAKE_CURRENT_SOURCE_DIR}/modules" 
    ${CMAKE_MODULE_PATH} 
) 

include(ExternalProject) 

set_directory_properties(PROPERTIES EP_BASE ${CMAKE_BINARY_DIR}/ExtProjects) 
get_directory_property(EXT_BASE_PATH EP_BASE) 

set(EXT_INSTALL_PATH ${EXT_BASE_PATH}/Install) 

include(ExternalVLCQt) 
include(MyProject) 

install(DIRECTORY ${EXT_INSTALL_PATH}/my_project DESTINATION .) 

このパターンの詳細については、hereを参照してください。このパターンでは、は、vlcqtのビルド後に、最上位のビルド時にCMakeLists.txtに設定されます。したがって、find_packageにはVLCQtパッケージがあります。

注:私の例ではVLCQT_ROOTfind_packageコマンドが使用されているMyProjectCMakeLists.txtによって受信されます。この変数はfind_packageコマンドのヒントであり、異なるパッケージの場合はこれが異なる場合があります。 find_packageで使用されているすべてのCMakeモジュールには、それぞれ固有の要件があります。

+0

良いアイデア。ありがとうございました! – amigo421

関連する問題