Всем здравствуйте.
В процессе использования GNU Autotools (предыстория) заметил, что иногда, в зависимости от проекта, файл компилируется командой
# Такой вариант используется в базовом amhello
gcc -c -o file.o file.c
а иногда
# Такой вариант используется, напр., в strace и gstreamer
gcc -c -o file.o `test -f file.c || echo $(srcdir)/`file.c
Причём VPATH
-сборки корректно работают в обоих случаях – просто точный путь до файла вычисляется либо в стадии конфигурации (./configure
), либо в стадии сборки (make
).
В документации эта разница никак не описана.
Если копаться в истории, то видно, что второй вариант появился с коммитом dd16cf3641508379a977c37b25fbbae93358bc40
и стал опциональным (в зависимости от значения флага GENERIC
) с коммитом 29ade8c79e328cb9f0ed0f132386b4a55027661c
.
Копание в исходном коде Automake не приблизило меня к пониманию, за каким рожном появилась такая хитровыдуманная проверка и, главное, что влияет на значение флага GENERIC
.
Кто-нибудь может пояснить?
Cast Harald