2017-01-12 3 views
2

Если я случайно изменил файл заголовка, сохранил его, а затем изменил его и снова сохранил, как остановить cmake от обнаружения изменений и перестроить все его зависимости. Обычно я даже не знаю, что он был изменен до тех пор, пока я не запустил make и не начнет процесс восстановления.Как остановить/трюк cmake не перестраивать, если файл заголовка был изменен, а затем вернут?

Я пробовал некоторые наивные изменения временной шкалы вручную, но не повезло.

Чтобы быть ясным, я ищу хак или кого-то, кто может объяснить правила использования cmake. Среда - linux/os x, используя командную строку gcc/clang.

+0

@ alexeykuzmin0 Вот что я имел в виду под термином «Я пробовал некоторые наивные изменения временной метки вручную». cmake, по-видимому, соображает, что кеширование каким-то образом .. Я не думаю, что он снова смотрит на отметки времени после того, как он определяет, что вещи нужно перестраивать. Ответ, вероятно, включает в себя изменение временных меток и изменение определенных файлов в CMakeFiles или что-то еще. – xaxxon

+0

Непонятно, если 'CMake' обнаруживает измененные файлы и повторно запускает конфигурацию/генерацию, или если это' make', который перестраивается, когда заголовок изменен. – AMA

ответ

5

cmake является генератором файлов (среди прочего, он может генерировать). Вот почему вы строите с make.

Поведение, которое вы видите, действительно стандартное поведение make. Это обобщенный инструмент построения; он восстанавливает любую «цель», применяя «рецепт» для этой цели всякий раз, когда цель устарела. Эти цели и рецепты были написаны cmake.

Вы можете запросить make, который будет перенастраивать его (make --dry-run), и обновить временную метку заголовка до достижения всех целей (touch -r oldest_target header.h). Альтернативно, чтобы избежать определения, какая цель старее всего, чередуйте make --dry-run и touch -r, используя первую цель, пока make --dry-run не вернет больше целей.