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

97

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

cmake -DCMAKE_INSTALL_PREFIX:PATH=/usr ..

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

Сейчас выполняю:

делать
сделать установку

Все файлы по-прежнему устанавливаются в usr / local. Что случилось?

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

install(TARGETS mylibrary DESTINATION lib)

Алекс Ф
источник

Ответы:

30

Есть два способа использовать эту переменную:

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

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

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

    SET(CMAKE_INSTALL_PREFIX < install_path >)

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

ryan_tu
источник
4
Странно, оператор SET () у меня работает, только если я помещаю его ПОСЛЕ оператора PROJECT () (CMake 2.8).
AstroFloyd
2
Этот ответ и ссылка, на которую он ссылается, более непосредственно обсуждают проблему до / после команды project ().
Craig Scott
Что это за PROJECTкоманда и как поставить cmakeперед ней эту опцию? У вас есть пример?
Стефан
6

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

Моя первая неделя использования cmake - после нескольких лет использования автоинструментов GNU - поэтому я все еще учусь (лучше, чем писать макросы 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

Дайте мне знать, если я ошибаюсь, мне нужно многому научиться. Это весело.

Джим
источник
Попробуйте использовать FORCE, когда вы делаете SET: set (CMAKE_INSTALL_PREFIX / foo / bar / bubba CACHE PATH "Cmake prefix" FORCE)
Jav_Rock