LINUX.ORG.RU

CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT

 


0

2

Читаю форумы, и везде советуют вместо явной установки CMAKE_INSTALL_PREFIX сначала проверить, а не ввел ли пользователь свой путь (что логично). Однако, у меня почему-то внутренняя переменная CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT принимает значение false, несмотря на то, что cmake туда запихнул неправильный путь /usr/local:

project(${PROJ})
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
message("def")
endif()
# change wrong behaviour with install prefix
if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND CMAKE_INSTALL_PREFIX MATCHES "/usr/local")
	message("Prefix!")
	set(CMAKE_INSTALL_PREFIX "/usr")
endif()
message("Install dir prefix: ${CMAKE_INSTALL_PREFIX}")

Сообщения "def" нет, сообщения "Prefix!" нет. Путь — /usr/local

Как с этим бороться? Раньше я просто менял

set(CMAKE_INSTALL_PREFIX "/usr")
но иногда ведь хочется и куда-нибудь во временное хранилище воткнуть. Да и в той же генте, чтобы пакеты собирать, такое поведение недопустимо!

P.S. cmake 2.8.10.2-5

☆☆☆☆☆

Последнее исправление: Eddy_Em (всего исправлений: 2)

Черт! В свежем cmake сработало. Похоже, в древнем такого ключа не было. И как быть???

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

Черт! В свежем cmake сработало. Похоже, в древнем такого ключа не было. И как быть???

CMAKE_MINIMUM_REQUIRED(VERSION X.Y.Z) ?

AF ★★★
()
Ответ на: комментарий от AF

Да, я уже и сам нашел, что это было из-за

cmake_minimum_required(VERSION 2.6)
Как только убрал эту строчку, понавылезало сообщений с предупреждениями, заменил на
cmake_minimum_required(VERSION 2.8)
и сработало.

Не думал, что эта строчка определяет поведение cmake (думал — просто проверка версий).

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

Не думал, что эта строчка определяет поведение cmake (думал — просто проверка версий).

Афигеть! Я тоже так считал. Надо будет запомнить, как оно есть на самом деле.

AF ★★★
()
Ответ на: комментарий от AF

А как автоматом создать временную директорию для cmake .. && make, не знаешь часом?

А то неудобно: mkdir tmp; cd tmp; cmake .. ...

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

Я cmake из скрипта продергиваю.
В скрипте создаю нужные директории ну и куча ключей для cmake.
Создание директории как-бы в нагрузку к стопке ключей идет, так что я по этому поводу не заморачиваюсь.

AF ★★★
()
Ответ на: комментарий от Eddy_Em

Да я тоже скриптом пользовался, но неужто нельзя из самого cmake? Как-то неудобно...

Походу ты хочешь странного.
Подразумевается, что в разных каталогах живут разные сборки, которые отличаются очень сильно. Если захардкодить один каталог, то профит теряется.

Да, есть у cmake «script mode» см. ключ -Р. Можно попробовать ч-з него. Но, по ходу, получится таже хрень.

AF ★★★
()
Ответ на: комментарий от intelfx

А, ты про это. Ну так не у всех же такой alias есть. Только скрипт, получается...

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em
cmake_minimum_required(VERSION 2.8)

if (${CMAKE_BINARY_DIR} STREQUAL ${CMAKE_SOURCE_DIR})
    execute_process(COMMAND mkdir build)
    execute_process(COMMAND cmake .. WORKING_DIRECTORY build)
    execute_process(COMMAND make WORKING_DIRECTORY build)
    return()
endif()

add_executable(aaa
    aaa.c)
$ cmake .
i-rinat ★★★★★
()
Ответ на: комментарий от slovazap

Я и не собираюсь менять то, что пользователь задал. Только менять префикс по умолчанию, т.к. он неправильный (вместо /usr по умолчанию идиотский /usr/local)

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

Это чтобы узер мог вычленить то, что он там насудомэйкинстоллил.

EXL ★★★★★
()
Ответ на: комментарий от i-rinat

Нет. В /usr/local мне нафиг не надо ставить! Хотя бы потому, что у большинства пользователей эта мусорка даже в PATH не прописана!

Eddy_Em ☆☆☆☆☆
() автор топика
Ответ на: комментарий от Eddy_Em

В /usr/local мне нафиг не надо ставить!

у большинства пользователей

Взаимоисключающие высказывания прямо в одном параграфе. Правила нужны для того, чтобы система не превращалась в помойку. Если заикнулся о «большинстве пользователей», прояви к этим пользователям уважение.

Кстати, сборочные скрипты пакетов в дистрибутивах всё равно меняют префикс на /usr, так что ты делаешь уже сделанную работу.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Кстати, сборочные скрипты пакетов в дистрибутивах всё равно меняют префикс на /usr, так что ты делаешь уже сделанную работу.

Не буду же я пакет для дистрибутива писать, чтобы свой велосипед установить!

// хотя, можно для генты и написать...

Eddy_Em ☆☆☆☆☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.