LINUX.ORG.RU

Cmake definions

 


1

3

Здравствуй, лор. Открыл для себя cmake. Потихоньку перевожу на него свой говнокод.

Столкнулся с проблемой.

include (GNUInstallDirs)
add_definitions (-DGUI_CONSTRUCT_PATH="${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT}/${PROJECT}.glade")
При сборке пакета не подставляется переменная CMAKE_INSTALL_DATAROOTDIR. Хотя ниже присутствует
install (FILES res/${PROJECT}.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications/)
И нормально подставляется.

Ответ на: комментарий от Harald

У autotools свои моменты. С них и перелез на cmake.

Cactus64k
() автор топика

А если кавычки убрать? Между строчками же ничего нет, что может влиять на эту переменную?

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

В сишном коде получится:

#define GUI_CONSTRUCT_PATH /usr/share/simple-fb2-reader/simple-fb2-reader.glade
Так что кавычки нужны. Т.к. Подставляется строка.

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

Переменая ${PROJECT} подставляется нормально.

Cactus64k
() автор топика

А переменная определена CMAKE_INSTALL_DATAROOTDIR?

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 1)
Ответ на: комментарий от zamazan4ik

у меня переменная CMAKE_INSTALL_DATAROOTDIR равна share

Так и задумывалось:

if(NOT DEFINED CMAKE_INSTALL_DATAROOTDIR)
  set(CMAKE_INSTALL_DATAROOTDIR "share" CACHE PATH "read-only architecture-independent data root (share)")
endif()
i-rinat ★★★★★
()
Ответ на: комментарий от zamazan4ik

не понимаю, в чём проблема

Cactus64k ожидает, что install(FILES) будет всегда требовать абсолютный путь, поэтому на основании того факта, что ${CMAKE_INSTALL_DATAROOTDIR}/applications/ работает, решил, что в CMAKE_INSTALL_DATAROOTDIR — абсолютный путь. И пытается его так использовать.

В итоге его приложение ищет glade-файлы не в /usr/share/$projectname, а по относительному пути share/$projectname, где их нет.

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

Я ожидаю, что CMAKE_INSTALL_DATAROOTDIR будет установлена в самом начале выполнения мейкфайла, а не только при инстале.

add_definitions (-DGUI_CONSTRUCT_PATH="${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT}/${PROJECT}.glade")
Решил проблему так.

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

Я ожидаю, что CMAKE_INSTALL_DATAROOTDIR будет установлена в самом начале выполнения мейкфайла

Она и установлена. Только не в то значение, что ты ожидаешь.

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