Что INSTALL_DIR полезно для команды ExternalProject_Add?
Я не понимаю использование INSTALL_DIR в команде ExternalProject_Add. Я пытаюсь использовать его, но он не работает. Вот пример CMakeLists.txt, используя Eigen-библиотеку, которая быстро компилируется:
cmake_minimum_required (VERSION 2.6)
project (example CXX)
include(ExternalProject)
include(ProcessorCount)
set(CMAKE_VERBOSE_MAKEFILE ON)
ProcessorCount(N)
if(NOT N EQUAL 0)
set(CMAKE_BUILD_FLAGS -j${N})
endif()
ExternalProject_Add
(
mylib
PREFIX myprefix
DOWNLOAD_COMMAND wget http://bitbucket.org/eigen/eigen/get/3.2.4.tar.gz && tar xvzf 3.2.4.tar.gz -C mylib --strip-components=1
)
Я выбрал следующую иерархию проекта:
project
CMakeLists.txt
build/
Из репозитория сборки я печатаю:
cmake ..
make
Процесс установки завершается с сообщением:
файл не может создать каталог:/usr/local/include/eigen3.
Возможно, нужны административные привилегии.
Насколько я понимаю, это означает, что мне нужно определить "префикс" во время этапа настройки:
cmake -D CMAKE_INSTALL_PREFIX=$INSTALL_DIR ..
Но переменная INSTALL_DIR уже определена в команде ExternalProject_Add. Тем не менее, я получаю ту же ошибку, когда я изменяю значение INSTALL_DIR, добавляя
INSTALL_DIR myprefix/src/install
в команде ExternalProject_Add.
Итак, для чего полезен INSTALL_DIR?
Что я делаю неправильно?
Конечно, я знаю, как предоставить свою собственную команду конфигурации, чтобы добавить префикс и решить проблему. Но это не мой вопрос. Мой вопрос: если я должен это сделать, какова цель INSTALL_DIR?
Ответы
Ответ 1
Из того, что я нашел в этом обсуждении https://www.mail-archive.com/[email protected]/msg51663.html (прокрутите до конца страницы, чтобы перемещаться по сообщениям потоков), это действительно довольно распространенная вещь для использования CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/contrib
Кроме того, скрываясь через модуль ExternalProject.cmake
, я обнаружил, что единственным действием, устанавливающим этот каталог, является то, что CMake создаст каталог, указанный в INSTALL_DIR, прежде чем делать что-либо еще.
Кроме того, он установит свойство, которое вы можете собрать с помощью команды ExternalProject_Get_Property(${project_name} install_dir)
.
И это в значительной степени.
//Начиная с версии CMake 3.2.2