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.