cmake から ExternalProject_Add コマンドを使用して DevIL をダウンロードしてビルドしようとしていますが、何らかの理由で、git リポジトリにはプロジェクトのサブフォルダー内に CMakeLists.txt ファイルがあります。
ExternalProject_add を作成して正しいフォルダーで cmake を呼び出す方法が見つからないようです。prefix と source_dir を使用してみましたが、それでも失敗します。
次に、正しいcmakeパスを呼び出す一時的なCMakeLists.txtの作成を含む回答をオンラインで見ました。しかし、cmake呼び出しへのパスを提供する方法がわからないため、ダウンロードしたgitリポジトリ内にパスを配置する必要があり、後で面倒であることがわかりました...これは私が使用している現在のコマンドです: 含める (「外部プロジェクト」)
######### 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/」の部分)。また、これは実際には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 を正しく構成するだけで、別の解決策がありますか?
パラメータ、パスなどに関するリクエストはありませんので、何でもお気軽に提案してください。どうすればこれを修正できますか? ありがとう