2016-06-20 17 views
0

私はExternalProject_Addコマンドを使ってDevakeをダウンロードしてビルドしようとしていますが、何らかの理由でプロジェクトのサブフォルダ内にCMakeLists.txtファイルがあります。CMake ExternalProject_addサブフォルダにCMakeListsを付けてください

正しいフォルダでExternalProject_addを起動してcmakeを呼び出す方法が見つからないようです。 接頭辞、およびsource_dirを使用しようとしましたが、それでも失敗します。

次に、正しいcmakeパスを呼び出す一時的なCMakeLists.txtの作成を含むオンラインでの回答を見ました。しかし、私はcmakeコールへの道を提供する方法を知らないので、これは、後で痛みであることを示したダウンロードされたgit repoの中に入れなければならないことを意味しました... これは私の現在のコマンドです使用: は(「ExternalProject」)を含む

######### Search for required third-party libraries. If not found, attempt to download and build them ######## 

set (DEVIL_ROOT "${THIRD_PARTY_OUTPUT_PATH}/DevIL") 
option (BUILD_DEVIL "Download and build DevIL" FALSE) 

find_package (Devil) 
if (NOT DEVIL_FOUND) 
    message (STATUS "DevIL not found. Forcing to build own copy...") 
    set (BUILD_DEVIL TRUE) 
endif() 

if (BUILD_DEVIL) 
set (DEVIL_BUILD_PATH "${THIRD_PARTY_BUILD_PATH}/DevIL/") 
set (DEVIL_OUTPUT_PATH "${THIRD_PARTY_OUTPUT_PATH}/DevIL") 

message (STATUS "Downloading DevIL and building...") 
file(WRITE ${DEVIL_BUILD_PATH}/DevilCMakeLists.txt "cmake_minimum_required(VERSION 3.0) \n add_subdirectory (DevIL)") 
ExternalProject_Add (ThirdParty_DevIL 
    PREFIX "${DEVIL_BUILD_PATH}" 
    GIT_REPOSITORY "https://github.com/DentonW/DevIL" 
    PATCH_COMMAND cmake -E copy "${DEVIL_BUILD_PATH}/DevilCMakeLists.txt" "${DEVIL_BUILD_PATH}/src/ThirdParty_DevIL/DevIL/" 
    INSTALL_DIR ${DEVIL_OUTPUT_PATH} 
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>) 

list (APPEND THIRD_PARTY_DEPENDENCIES ThirdParty_DevIL) 
set (DEVIL_INCLUDE_DIR "${DEVIL_OUTPUT_PATH}/include") 
set (DEVIL_LIBRARY devil) 
add_definitions (-DDEVIL) 
endif() 

list (APPEND THIRD_PARTY_INCLUDE_DIRS "${DEVIL_INCLUDE_DIR}") 
list (APPEND THIRD_PARTY_LIBRARIES ${DEVIL_LIBRARY}) 

を私は、この(「/ srcに/ ThirdParty_DevIL /」の部分)のようなパスをハードコーディングしようとしたが、それは地獄のように醜いだし、cmakeのは、それを変更することを決定した場合将来、それは壊れるでしょう。 はまた、これは実際のgitツリー内のファイルをコピーしているので、cmakeのは、後に

Failed to unstash changes in: 
'<yadda yadda>/ThirdParty/build//DevIL//src/ThirdParty_DevIL/'. 


You will have to resolve the conflicts manually 

と文句を言い、このソリューション(一時的なCMakeListst.txtを作成)が働くようにする方法はありますか? さらに、ExternalProject_addを正しく設定するだけで、別の解決方法がありますか?

私は、パラメータ、パス、何でも何でも提案する必要はありません。 これを修正するにはどうすればよいですか?あなたが手動で通常で与えられている、このコマンドのもの、に追加する必要があり、その場合には

ExternalProject_Add (ThirdParty_DevIL 
    PREFIX "${DEVIL_BUILD_PATH}" 
    GIT_REPOSITORY "https://github.com/DentonW/DevIL" 
    INSTALL_DIR ${DEVIL_OUTPUT_PATH} 
    CONFIGURE_COMMAND ${CMAKE_COMMAND} -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> 
     <SOURCE_DIR>/DevIL # Tell CMake to use subdirectory as source. 
) 

: おかげ

答えて

1

代わりにソースツリーにパッチを適用のあなたは、ソースとして適切なディレクトリを使用していますCONFIGURE_COMMANDオプションを提供することができますなどのオプションCMAKE_ARGSCMAKE_CACHE_ARGSなど。しかし、これは本当の問題ではありません。のみパッケージをダウンロード1、および他のすべてを行いその二:


また、次の2つの呼び出しにExternalProject_Addを分割することができます。あなたが別のSOURCE_DIRオプション使用することができ、これらの呼び出しでは:PREFIXに基づいてSOURCE_DIRの計算は外部プロジェクトの名前と名前に依存するため

ExternalProject_Add (ThirdParty_DevIL_download 
    PREFIX "${DEVIL_BUILD_PATH}" 
    SOURCE_DIR "${DEVIL_BUILD_PATH}/src/ThirdParty_DevIL" # Explicitely set 
    GIT_REPOSITORY "https://github.com/DentonW/DevIL" 
    CONFIGURE_COMMAND "" # Disable all other steps 
    BUILD_COMMAND "" 
    INSTALL_COMMAND "" 
) 

ExternalProject_Add (ThirdParty_DevIL 
    PREFIX "${DEVIL_BUILD_PATH}" 
    DOWNLOAD_COMMAND "" # Disable download step 
    SOURCE_DIR "${DEVIL_BUILD_PATH}/src/ThirdParty_DevIL/DevIL" # Source dir for configuration 
    INSTALL_DIR ${DEVIL_OUTPUT_PATH} 
    CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR> 
) 

# Add dependency between to calls 
add_dependencies(ThirdParty_DevIL ThirdParty_DevIL_download) 

を2回の通話が異なるされ、このオプションが明示的に設定されています。

ビルドログには、多くの「実行されていない」ステップ(最初のExternalProject_Add()コールの設定、構築、インストール、2回目のコールのダウンロード、パス、アップデート)の行が表示されます。

+0

残念なことに、私は余分な構成ステップが必要となり、依存関係を追加するのでDevilを放棄していますが、これはまだ最適な解決策であり、ALMOSTの完成ビルドでした。ありがとう。 –

関連する問題