Зависимость от заголовка в автоделает

Я просто хочу подчеркнуть, что это "Открывается/Закрывает", даже при том, что быть очевидно полезным в программировании OO, здоровый метод для использования во всех аспектах разработки. Например, в моем собственном опыте это - большое болеутоляющее для использования, "Открываются/Закрывают" как можно больше при работе с плоскостью C.

/Robert

5
задан viraptor 22 November 2009 в 21:00
поделиться

1 ответ

BUILT_SOURCES = version.h

Все файлы, указанные как BUILT_SOURCES , будут построены до запуска любого из обычных правил компиляции.

Однако это создаст небольшую проблему: Как версия .h необходимо будет перестраивать при каждом вызове make , перекомпиляции каждого файла foo.c , который имеет версию #include s . h будет запускаться снова при каждом запуске make . Мы бы предпочли, чтобы перекомпиляция происходила только тогда, когда что-то действительно изменилось.

Чтобы обойти эту проблему, используйте зависимость BUILT_SOURCES от файла штампа, который "создается" каждый раз (никогда фактически создается, поэтому правило сборки запускается каждый раз). Правило сборки для этого файла штампа создает новую версию . h файл как version.h.tmp , и только version.h.tmp копируется в version.h , если version.h. tmp на самом деле отличается от version.h (как и ваше правило version.h ). Таким образом, если ничего не изменилось в version.h , его временная метка (mtime) останется прежней, и не будет запущена сборка объектов в зависимости от version.h :

BUILT_SOURCES = version.stamp

version.stamp:
        echo '#define VERSION "'`hg id`'"' > version.h.tmp
        cmp version.h.tmp version.h || mv version.h.tmp version.h

Это решение будет делайте то, о чем просите.

К сожалению, при сборке из дистрибутивного архива возникнет небольшая проблема: тогда hg id предоставит вам ложную информацию, а , вероятно, не будет ] version.h в вашем архиве, поэтому сборка завершится ошибкой или будет содержать ложную информацию о версии.

Я решил эту проблему для проекта xf86-video-radeonhd , который использует git . Файл git-version.h , созданный в этом решении, содержит дополнительную информацию о версии, чем просто номер версии. Вы можете увидеть это мое решение update-only-if-different в конце git_version.sh и подключения BUILT_SOURCES (включая обработку, надеюсь, всех сценарии сборки out-of-source-tree и from-dist-tarball ) в RadeonHD.am , если вам интересно.

11
ответ дан 13 December 2019 в 19:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: