automake Добавление всех файлов c в каталог

В файле Makefile.am компании automake источники программы перечислены как

bin_PROGRAMS = os345v1

os345v1_SOURCES = os345.c os345interrupts.c os345semaphores.c

Вместо того, чтобы указывать отдельные файлы, Как добавить все файлы c в определенную директорию и подкаталог?

2 ответа

Обычно плохая идея использовать групповые символы в automake.

во-первых, ваш проект automake может быть обработан с использованием не-GNU-реализации make (которая может не иметь возможности использовать расширения GNU-make, такие как $(wildcard *.c)). Одной из сильных сторон autotools / automake является то, что он не зависит от целевых систем и их цепочек инструментов.

Что еще более важно, automake, возможно, потребуется знать, какие именно исходные файлы вы хотите собрать. Это важно, например, когда вы хотите создавать сборки из исходного дерева (например, с исходным кодом на носителе только для чтения и сборками "где-то еще"): это распространенный вариант использования для дистрибутивов (например, Debian), которые позволяют легко создавать несколько вариантов (с разными флагами конфигурации) из одного и того же источника за один прогон.

И, наконец, отсутствие подстановочных знаков защищает вашу сборку от случайных исходных кодов. Например, наличие "foo.c" и файла резервной копии "foo_old.c" (например, потому что вы повторно реализуете "foo" и хотите проверить со старой реализацией и хотите, чтобы ваш редактор автоматически включил подсветку синтаксиса), лежащей вокруг в одной папке может случайно создать оба файла, что приведет к множественному определению одних и тех же символов.

См. Также документацию automake, почему automake не поддерживает подстановочные знаки.

GNU make имеет функцию подстановки, например

os345v1_SOURCES = $(wildcard *.c)

Обратитесь к разделу руководства по GNU make для функций Filename для получения информации о других функциях имен файлов.

Все, что применимо в Makefile, также применимо в automake, потому что automake преобразует свой файл automake в Makefile.

В этом смысле automake - это макропроцессор. Думайте об этом как о аналоге препроцессора C для C, за исключением того, что вы держите в руках преобразованный файл, Makefile, в дополнение к источнику, с которым вы работаете, Makefile.am.

Другие вопросы по тегам