Як користуватися 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 я видаляю все з вихідного каталогу. директиви встановлення в CMakeLists.txt виглядають так:

install(TARGETS mylibrary DESTINATION lib)

Відповіді:



30

Існує два способи використання цієї змінної:

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

    cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..

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

    SET(CMAKE_INSTALL_PREFIX < install_path >)

    Але пам’ятайте про те, щоб розмістити його ДО PROJECT(< project_name>) команди, інакше це не буде працювати!


4
Дивно, але оператор SET () працює для мене лише в тому випадку, якщо я розміщу його ПІСЛЯ оператора PROJECT () (CMake 2.8).
AstroFloyd

2
Ця відповідь та посилання, на яке вона посилається, більш безпосередньо обговорюють проблему команди до / після проекту ().
Крейг Скотт

Що це за 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.