#visual-studio #makefile #gnu
#visual-studio #makefile #gnu
Вопрос:
Взяв в качестве примера приложение GNU make, когда я создаю makefile, он уподобляется файлу проекта Visual Studio в том смысле, что он содержит список файлов и других элементов, необходимых для компиляции приложения. Makefile содержит путь к компилятору, а также путь ко всем файлам, которые могут быть использованы в операции компиляции. Приложение MAKE считывает makefile и объединяет исходные файлы в 1 файл, который затем компилятор считывает и преобразует в соответствующую сборку / машинный код.
Директива #include — это директива, которая предписывает make-файлу: «включите содержимое этого файла в эту точку файла большего размера, который вы создаете для отправки компилятору, а затем возобновите работу с текущим файлом».
Приложение MAKE также сообщает компилятору, куда «выдать» результат операции компиляции после завершения компиляции. В этом отношении файл Visual Studio .csproj технически представляет собой makefile на основе XML для конкретного приложения Microsoft MAKE.
Правильно ли это понимание makefiles?
Ответ №1:
Приблизительно, да. Однако есть множество деталей, к которым можно придраться.
Взяв в качестве примера приложение GNU make, когда я создаю makefile, он сравнивается с файлом проекта Visual Studio в том смысле, что он содержит список файлов и других элементов, необходимых для компиляции приложения.
Это достаточно близко к точности.
Makefile содержит путь к компилятору, а также путь ко всем файлам, которые могут быть использованы в операции компиляции.
Makefile обычно не содержит путь к компилятору, хотя мог бы. Он будет содержать список файлов, которые могут быть использованы при компиляции.
Приложение MAKE считывает makefile и объединяет исходные файлы в 1 файл, который затем компилятор считывает и преобразует в соответствующую сборку / машинный код.
Это не очень точно. Детали различаются, но агрегирование выполняется не MAKE, а компиляторами, которые вызывают MAKE. MAKE можно использовать для других задач, помимо простого перевода исходного кода в машинный.
Директива #include — это директива, которая предписывает make-файлу: «включите содержимое этого файла в эту точку файла большего размера, который вы создаете для отправки компилятору, а затем возобновите работу с текущим файлом».
GNU Make (и POSIX Make) поддерживает include
директиву для включения других фрагментов makefile. Компиляторы C и C распознают #include
директиву — и makefile часто необходимо проинформировать о том, какие заголовки (включенные в #include
директиву) необходимы для компиляции программы. Однако, #include
это простой комментарий в файле makefile.
Приложение MAKE также сообщает компилятору, куда «выдать» результат операции компиляции после завершения компиляции.
Makefile содержит информацию о том, куда следует поместить сгенерированный код, и компилятору сообщается, нужно ли ему это знать.
В этом отношении файл Visual Studio .csproj технически представляет собой makefile на основе XML для конкретного приложения Microsoft MAKE.
Это разумное приближение к описанию.
Ответ №2:
В частности, вы правы в том, что makefile можно использовать таким образом, и часто так и делается. Обычно утилита make разрешает зависимости в следующих правилах, указывающих, какие элементы (в основном файлы) зависят от других и какие шаги (например, операции компиляции) необходимо предпринять для выполнения зависимости. Переменные и правила внутри makefiles соответствуют синтаксису утилиты make.