Я пытаюсь загрузить скомпилированные двоичные файлы с веб-сервера в cmake. Так есть ли что-то похожее на ExternalProject_Add
, но без фактического шага сборки?
Загруженный файл является tar.gz и должен быть извлечен. Он содержит /bin
/include
и /lib
и особенно также /lib/cmake
, который должен быть найден вызывающим проектом CMake.
Если I ExternalProject_Add
приводит к ошибке, что папка сборки не содержит файл CMakeLists.txt.
Пример minium - что-то вроде
cmake_minimum_required(VERSION 3.0)
project(Foo)
if (TARGET Bar)
message(STATUS "Foo and Bar are unified - how beautiful is that")
else()
include (ExternalProject)
ExternalProject_Add ( Bar # <------ This doesn't work
URL "http://THE-INTERNET"
)
endif()
find_package(Bar REQUIRED)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} Bar::Bar)
Хорошо, я понял две вещи:
- Команда
CONFIGURE_COMMAND ""
может быть предоставлена для ExternalProject ничего не собирает. find_package()
никогда не будет работать так. ExternalProject выполняется во время компиляции, в то время как find_package должен найти цель во время настройки.
Тем временем я нашел это: https://cmake.org/cmake/help/latest/module/FetchContent.html - это может помочь подготовить цели во время настройки, а не только во время компиляции. Однако он поддерживается только в CMake 3.11: (