Я пытаюсь загрузить и построить DevIL с помощью команды ExternalProject_Add от cmake, но по какой-то причине git repo имеет файл CMakeLists.txt внутри подпапки проекта.CMake ExternalProject_add с CMakeLists на вложенной папке
Я не могу найти способ заставить ExternalProject_add вызывать cmake в правильной папке. Я попытался использовать префикс и source_dir, но он все еще не работает.
Затем я увидел ответ онлайн, в котором участвовал создание временного CMakeLists.txt, который бы назвал правильный путь cmake. Но так как я не знаю, как обеспечить путь к вызову cmake, это означало, что мне пришлось бы поместить его в загруженное git-репо, которое позже показало, что это боль ... Это текущая команда, которую я с помощью: включают в себя («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 решает изменить его в будущее, оно сломается. Кроме того, так как это фактически копирует файл внутри дерева мерзавца, 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?
У меня нет запросов относительно параметров, путей, что угодно, поэтому не стесняйтесь предлагать что-либо. Как я могу это исправить? Благодаря
Пошел на первое решение. К сожалению, я отказываюсь от DevIL, так как ему нужны дополнительные шаги настройки и добавляет зависимости, но это по-прежнему самое лучшее решение, и это было сделано ALMOST. Благодарю. –