Подтвердить что ты не робот

Что 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?

4b9b3361

Ответ 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