Оптимизирует ли компилятор порядок компиляции файлов в make-файле с учетом целевой функции?

Предположим, у меня есть файл make с 3 файлами: A, B, C. B и C зависят только от A. Один из возможных способов разрешения зависимостей - это компиляция в порядке ABC. Другой способ - ACB. Мои вопросы: оптимизируют ли компиляторы в целом порядок, в котором они компилируют файлы с учетом какой-либо целевой функции, или они просто случайным образом выбирают порядок?


person AspiringMat    schedule 13.07.2017    source источник
comment
Что вы имеете в виду, говоря, что B и C зависят только от A? B и C могут включать A, но это обычно означает, что A является файлом заголовка и, следовательно, не должен компилироваться как единица перевода.   -  person user7860670    schedule 13.07.2017
comment
Файлы B и C не могут компилироваться, пока не скомпилирован A.   -  person AspiringMat    schedule 13.07.2017
comment
А почему так? Вы имеете в виду, что A - это библиотека, а B и C - исполняемые файлы или что? Думаю, вам следует предоставить mcve.   -  person user7860670    schedule 13.07.2017
comment
При компиляции A, B или C компилятор ничего не знает о других файлах. Работает только с одним файлом. Вы спрашиваете о домене системы сборки, make в вашем случае. Вероятно, ответ на ваш вопрос есть здесь. Также рассмотрите возможность использования генератора системы make, такого как cmake или что-то в этом роде. Он предоставляет удобный, не зависящий от платформы набор абстракций для создания вашего проекта.   -  person Sergey    schedule 13.07.2017
comment
Компиляторы не определяют порядок, в котором компилятор вызывается ... make решает это.   -  person M.M    schedule 13.07.2017
comment
Неважно, что такое A, B и C. Это программа make, которая определяет порядок построения зависимостей. Он может даже делать некоторые параллельно.   -  person juanchopanza    schedule 13.07.2017
comment
gmake с переключателем -j2 будет строить B и C параллельно, а затем строить A. Распространенная ошибка при написании make-файлов - это предположение, что A: B C означает, что B будет собран до C.   -  person M.M    schedule 13.07.2017
comment
Понятно. Я немного растерялся. И да, связанный вопрос отвечает на мой вопрос.   -  person AspiringMat    schedule 13.07.2017