Как изменить порядок целей, добавить дополнительные шаги и т. д. для Makefile.am?

Могу ли я управлять Makefile.am так, как привык управлять Makefile?

Обычно я создаю цели, которые вызывают друг друга, чтобы построить проект.

Но в Makefile.am у меня есть какой-то таинственный libqqq_la_SOURCES = ..., который я не знаю, что именно он делает.

Где написать, какой компилятор использовать для данного источника? Где добавить шаг, что "qqq.c генерируется из qqq.vala"?

Как написать Makefile.am просто как Makefile?


person Vi.    schedule 16.12.2010    source источник
comment
Почему вы используете Automake, если вы не знаете, что он делает, и вам удобно использовать make-файлы напрямую? Какова ваша цель?   -  person Peter Eisentraut    schedule 25.12.2010
comment
Поскольку я редактирую проект, в котором используется automake. (Новая версия на самом деле использует qmake, поэтому я, вероятно, просто мигрирую)   -  person Vi.    schedule 26.12.2010


Ответы (2)


В Automake версии 1.11 есть поддержка Vala.

настроить.ac:

AM_PROG_VALAC

Makefile.am:

AM_VALAFLAGS = whateverelse
whatever_SOURCES = xxx.vala
person user502515    schedule 20.12.2010

Automake автоматически скопирует любые цели Make, указанные вами в Makefile.am, в сгенерированный Makefile. Таким образом, вы можете создавать любые нестандартные сложные вещи, просто включив их в файл .am.

Однако вы не должны делать это для всего — это сводит на нет преимущества, которые Automake пытается вам предоставить. Указание

bin_PROGRAMS=foo
AM_CFLAGS=$(DEPS_CFLAGS)
foo_SOURCES=file1.cpp file2.cpp
foo_LDADD=$(DEPS_LIBS)

все равно сгенерирует стандартную цель Make. Я рекомендую вам научиться использовать макросы Automake для большинства стандартных задач — так он будет более переносимым.

Лучший способ изучить богатое разнообразие функций Autotools — не читать руководство — оно слишком сложное и неорганизованное. Я предлагаю просто взять существующий проект GNU с открытым исходным кодом, похожий по стилю сборки (зависимости, платформы и т. д.) на ваш, и изучить его файлы Autoconf и Automake. Устоявшиеся проекты научились многим приемам, которым можно научиться.

person Adrian Petrescu    schedule 16.12.2010
comment
Какой из них является смесью Vala, C и C++? - person Vi.; 17.12.2010
comment
Automake должен автоматически определять C и C++ на основе расширений. Он не имеет первоклассной поддержки Vala, но вот ссылка о добавлении некоторой базовой поддержки для произвольных языков: tinf2.vub.ac.be/~dvermeir/manuals/automake/ - person Adrian Petrescu; 17.12.2010
comment
Если ваш проект действительно настолько популярен (сочетание трех языков, один из которых очень не является основным), то, возможно, Autotools в любом случае не подходит для вашего проекта. Насколько портативна Vala? - person Adrian Petrescu; 17.12.2010
comment
AM_CPPFLAGS предназначен для флагов препроцессора, вы должны использовать AM_CFLAGS для CFLAGS. - person user502515; 20.12.2010
comment
Примечание: -D и -I (-DFOO -Iinclude/) являются флагами процессора, а -f (например, -ffast-math) таковыми не являются. - person user502515; 22.12.2010
comment
@ user502515 Ага, знал это. Но имеет ли это отношение к моему ответу? - person Adrian Petrescu; 22.12.2010
comment
@Adrian Petrescu: В наши дни у automake есть поддержка Vala: gnu .org/software/hello/manual/automake/Vala-Support.html - person Jack Kelly; 04.01.2011