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

Как использовать CMAKE_INSTALL_PREFIX

Я хочу создать Makefile с целью установки, сделав установку в /usr вместо default/usr/local. Предполагая, что каталог сборки выполняется в исходном подкаталоге, я выполняю:

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

CMakeCache.txt содержит: CMAKE_INSTALL_PREFIX:PATH=/usr (ОК?)

Теперь я выполняю:

make
make install

Все файлы все еще установлены в usr/local. Что не так?

Изменить: В любом из файлов проекта CMakeLists.txt отсутствует CMAKE_INSTALL_PREFIX. Перед запуском cmake я удаляю все из выходного каталога. директивы установки в CMakeLists.txt выглядят так:

install(TARGETS mylibrary DESTINATION lib)

4b9b3361

Ответ 1

Это должно быть (см. docs):

cmake -DCMAKE_INSTALL_PREFIX=/usr ..

Ответ 2

Существует два способа использования этой переменной:

  • передавая его как аргумент командной строки, как указано в Job:

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

  • присвоение ему значения в CMakeLists.txt:

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    Но не забудьте поместить его до PROJECT(< project_name>), иначе это не сработает!

Ответ 3

Но не забудьте поместить его перед командой PROJECT (< project_name > ), иначе это не сработает!

Моя первая неделя использования cmake - через несколько лет GNU autotools - так что я все еще участвую (лучше, чем писать макросы m4), но я думаю, что лучше изменить проект настройки CMAKE_INSTALL_PREFIX после.

CMakeLists.txt

cmake_minimum_required (VERSION 2.8)

set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
project (BarkBark)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")
set (CMAKE_INSTALL_PREFIX /foo/bar/bubba)
message("CIP = ${CMAKE_INSTALL_PREFIX} (should be /foo/bar/bubba")

Первый запуск (без кеша)

CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- The C compiler identification is GNU 4.4.7
-- etc, etc,...
CIP = /usr/local (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done

Второй прогон

CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
CIP = /foo/bar/bubba (should be /foo/bar/bubba
-- Configuring done
-- Generating done

Сообщите мне, если я ошибаюсь, у меня много учиться. Это весело.