LINUX.ORG.RU

automake - var директория

 


0

1

Здравствуйте. Изучаю autotools, не пойму как решить (правильно) такую задачу:\n #makefile.am \n bin_PROGRAMS = hello \n hello_SOURCES = main.c

После make install, исполняемый файл пойдёт в bin, отлично. Допустим, что наш hello ведёт расширяемую базу данных. В исходниках проекта лежит начальный вариант базы, установленная програма будет дописывать данные в неё.

Я должен: в $prefix/var/hello/ скопировать начальный вариант базы + hello должен существовать в var (даже когда копирование начальной базы отсутствует).

Как решение задачи будет выглядеть в makefile.am? Я ничего не напутал с метом под базу?

★★

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

Прежде всего закапывай autocrap и изучай cmake чтобы не тратить время на инструмент, который делает всё чтобы помешать тебе сделать то что ты хочешь и уже никем в новых проектах не используется. Далее, твой вопрос некорректен, поскольку приложение не должно изменять устанавливаемые им файлы. Ставь начальную базу в ${prefix}/share/hello, в var-директорию копируй его при первом запуске, если это нужно. И, наконец, за ${prefix}/var надо отрывать руки. Для изменяемых данных есть единый системный /var. И в данном случае нужно использовать что-то типа /var/db/hello

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

..Далее, твой вопрос некорректен, поскольку приложение не ..должно изменять устанавливаемые им файлы. Ставь начальную ..базу в ${prefix}/share/hello, в var-директорию копируй его ..при первом запуске, если это нужно. Чем регламентируются такие вопросы? Где можно почитать (не спорю с тезисом, для саморазвития)?

..И, наконец, за ${prefix}/var надо отрывать руки. Для ..изменяемых данных есть единый системный /var. И в данном ..случае нужно использовать что-то типа /var/db/hello База ляжет в /var/local/*, вроде всё по fhs. autoconf задаёт переменную: localstatedir - The directory for installing modifiable single-machine data (равна ${prefix}/var). Я сделал симлинк из /var/local->/usr/local/var

pavlick ★★
() автор топика

Makefile.am:

install-data-local:
        $(MKDIR_P) "$(DESTDIR)$(localstatedir)/myprog/data"
        cp -R ./db "$(DESTDIR)$(localstatedir)/myprog/data/"

uninstall-local:
        rm -rf "$(DESTDIR)$(localstatedir)/myprog/"

configure.ac:

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

Сразу и не заметишь отличия Makefile.am от обычного Makefile )). Читаю доки, написал так (работает):

bin_PROGRAMS = hello
hello_SOURCES = main.c
vardir = $(localstatedir)/$(PACKAGE)
dist_var_DATA = base
Всё как положено: make install / uninstall

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

Да, так лучше, конечно. Вспомнил, у меня там были разные дополнительные действия при установке/удалении, скопипастил не подумав

Deleted
()

Ребят, спасибо тем, кто ответил. Вроде разобрался. Мне вот только не понятно - за что все матерят autotools, мол синтаксис корявый и вообще всё не так? По мне, синтаксис не хуже, чем у cmake.

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