Как использовать CMAKE_INSTALL_PREFIX
Я хочу создать 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)
6 ответов
Это должно быть (см. Документы):
cmake -DCMAKE_INSTALL_PREFIX=/usr ..
Есть два способа использовать эту переменную:
передавая его в качестве аргумента командной строки, как упоминал Иов:
cmake -DCMAKE_INSTALL_PREFIX=< install_path > ..
присвоение ему значения в
CMakeLists.txt
:SET(CMAKE_INSTALL_PREFIX < install_path >)
Но не забудьте разместить его ДО
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
Дайте мне знать, если я ошибаюсь, мне нужно многому научиться. Это весело.
В современном CMake CLI это еще проще. Последняя команда устанавливает цели вbuild
папку вmyInstallationDirectory
используяprefix
вариант.
cmake -S . -B build
cmake --build build
cmake --install build --prefix myInstallationDirectory
Ссылка: https://cmake.org/cmake/help/latest/manual/cmake.1.html?highlight=install#cmdoption-cmake--install-0
Это сработало для меня:
Поместите этот код в cmakelist.txt в самом верху:
SET(CMAKE_INSTALL_PREFIX < install_path >)
Почему-то сделать это через командную строку у меня не получается:
-D CMAKE_INSTALL_PREFIX=/home/user/Human-Detection-Module/build/install/
Например, чтобы добавить внешние проекты:
У меня работает следующее (cmake для Windows: v3.25.2) на основе этой темы :
project("My_Project" VERSION 1.0.0 LANGUAGES C CXX)
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set(CMAKE_INSTALL_PREFIX ${PROJECT_SOURCE_DIR}/external
CACHE PATH "Force path to set CMAKE_INSTALL_PREFIX" FORCE)
endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
Для проверки запустите$> ccmake build
или$> ccmake .
в каталоге сборки, чтобы увидеть, что для переменной кэша установлено значение:
CMAKE_BUILD_TYPE Debug
CMAKE_CONFIGURATION_TYPES Debug;Release;MinSizeRel;RelWithDebInfo
CMAKE_EXPORT_COMPILE_COMMANDS ON
CMAKE_INSTALL_PREFIX D:/Projects/CMakeTest/external
Раньше это было:
CMAKE_BUILD_TYPE Debug
CMAKE_CONFIGURATION_TYPES Debug;Release;MinSizeRel;RelWithDebInfo
CMAKE_EXPORT_COMPILE_COMMANDS ON
CMAKE_INSTALL_PREFIX C:/Program Files/My_Project
Это на Windows, я думаю, что это будет/usr/cmake/My_project
на Linux.(если кто-то сможет подтвердить)
РЕДАКТИРОВАТЬ:
Если изменения не отражаются, вы можете удалитьCMakeCache.txt