Automake перестроить исходный файл, если Makefile изменится - PullRequest
3 голосов
/ 01 июля 2011

При использовании системы сборки autoconf / automake, если флаги компилятора или другие переменные в Makefile.am (или даже на более высоком уровне, например configure.ac) изменяются, исходные файлы C ++, связанные с этим Makefile, не будут автоматически перестраиваться.Это становится особенно важным, так как мы используем automake как часть системы непрерывной сборки, которая перекомпилируется только при необходимости.

Я думал включить Makefile в качестве зависимости для файлов .o, что теоретически решит вышеуказанную проблему.Итак, пара вопросов:

Во-первых, возможно ли добавить подобное правило?Я бы предпочел не добавлять это пользовательское правило в каждый отдельный файл Makefile.am, поэтому что-то, что можно поместить в файл верхнего уровня (например, configure.ac), было бы замечательно.

Во-вторых, недостатокэтот подход заключается в том, что в некоторых случаях изменения в Makefile фактически не влияют на компиляцию, поэтому я в конечном итоге буду перестраивать, когда это действительно не нужно.Думаю, я готов с этим смириться (или хотя бы попробовать, чтобы увидеть, как это больно), чтобы иметь лучшую гарантию того, что мои сборки будут правильными, но есть ли лучший способ решить эту проблему?Я полагаю, что clearmake решает эту проблему, сохраняя фактическую команду компилятора (вместе с другими зависимостями), а затем сравнивая текущую команду с предыдущей, чтобы определить, нужно ли восстанавливать файл.

1 Ответ

2 голосов
/ 01 июля 2011

Если вы используете ccache (./configure CXX='ccache g++' или просто добавляете gcache ccache в путь), ложные перестройки должны быть очень дешевыми и безопасными. Также убедитесь, что вы никогда не используете макрос AM_MAINTAINER_MODE autoconf, что делает отслеживание зависимостей необязательным (зависит от флага --enable-keeper-mode).

...