Избегание перекомпиляции некоторых файлов
Иногда вы можете изменить исходный файл, но не хотите перекомпилировать все файлы, зависящие от него. Например, предположим, что вы добавили макрос или объявление в заголовочный файл, от которого зависят многие другие файлы. Будучи консервативным, make предполагает, что любое изменение в заголовочном файле требует перекомпиляции всех зависимых файлов, но вы знаете, что их перекомпилировать не нужно, и вы предпочитаете не тратить время на ожидание их компиляции.
Если вы предвидите проблему до изменения заголовочного файла, вы можете использовать флаг ‘-t’. Этот флаг сообщает make не выполнять рецепты в правилах, а вместо этого пометить цель как обновленную, изменив ее дату последнего изменения. Вы бы последовали этой процедуре:
- Используйте команду ‘make’, чтобы перекомпилировать исходные файлы, которые действительно нуждаются в перекомпиляции, убедившись, что объектные файлы актуальны перед началом.
- Внесите изменения в заголовочные файлы.
- Используйте команду ‘make -t’, чтобы пометить все объектные файлы как актуальные. В следующий раз, когда вы запустите
make, изменения в заголовочных файлах не приведут к какой-либо перекомпиляции.
Если вы уже изменили заголовочный файл в момент, когда некоторые файлы нуждаются в перекомпиляции, уже слишком поздно это делать. Вместо этого вы можете использовать флаг ‘-o file’, который помечает указанный файл как «старый» (см. Список опций). Это означает, что сам файл не будет пересоздан, и ничего больше не будет пересоздано из-за него. Следуйте этой процедуре:
- Перекомпилируйте исходные файлы, которые нуждаются в компиляции по причинам, не зависящим от конкретного заголовочного файла, с помощью ‘make -o headerfile’. Если задействовано несколько заголовочных файлов, используйте отдельный параметр ‘-o’ для каждого заголовочного файла.
- Обновите все объектные файлы с помощью ‘make -t’.
Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022 Free Software Foundation, Inc.
Licensed under the GNU Free Documentation License.
https://www.gnu.org/software/make/manual/html_node/Avoiding-Compilation.html