自分のプロジェクトと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_ROOT
はfind_package
コマンドが使用されているMyProject
のCMakeLists.txt
によって受信されます。この変数はfind_package
コマンドのヒントであり、異なるパッケージの場合はこれが異なる場合があります。 find_package
で使用されているすべてのCMakeモジュールには、それぞれ固有の要件があります。
[ExternalProject_Add](https://cmake.org/cmake/help/v3.7/module/ExternalProject.html)を介して外部プロジェクトを含めるので、メインプロジェクトのビルド時に設定されます。 – Tsyvarev
私はまさしくこれをやっていますが、設定時に検索パッケージを実行しようとしています – amigo421
外部プロジェクトが*設定されている場合に**必要な図書館員が必要です**。代わりに**手動で**(つまり、 'FindVLCQt.cmake'スクリプトなしで)すべての* CACHE *変数を埋めてください。しかし、このアプローチでは、スクリプト内部の知識が必要であり(ドキュメンテーションが不十分です)、一部のパッケージでは機能しない可能性があります。 – Tsyvarev