Как определяется порядок компиляции исходных файлов? - PullRequest
2 голосов
/ 01 апреля 2009

У меня есть рабочее пространство, содержащее много файлов * .c, которые я компилирую. (Я мог бы использовать любой набор инструментов, скажем, MSVC6.0 или gcc и т. Д.)

Какой исходный файл компилируется первым?

Как определяется порядок файлов, которые будут скомпилированы впоследствии?

Ответы [ 5 ]

9 голосов
/ 01 апреля 2009

Порядок компиляции не указан стандартом C.

Поскольку нет необходимости создавать глобальные объекты, как в C ++, нет ситуации, в которой порядок компиляции важен в C.

5 голосов
/ 01 апреля 2009

Как правило, это нигде не указано. Особенно при использовании, например. параллельный make, порядок компиляции в значительной степени произвольный.

5 голосов
/ 01 апреля 2009

VC : По папке проекта, затем по алфавиту.
GCC : в соответствии с порядком создания файла

Почему это важно ?, порядок выполнения не измеряется и не влияет на конечный результат сборки.

2 голосов
/ 01 апреля 2009

С make:

  • Цели решаются в порядке их появления
  • Для каждой цели построено дерево зависимостей, и я бы предположил, что дерево просматривается на глубину с оценкой после заказа (кажется, это единственный способ, которым это будет работать, но я не могу найти ничего, что указывает это документация)

Как подсказывает jpalecek , одновременные сборки могут быть более сложными.


Некоторые цитаты из GNU составляют документы:

Правила двойного двоеточия для цели выполняются в том порядке, в котором они появляются в make-файле.

...

Если вы укажете несколько целей, выполняйте процессы по очереди для каждой из них в указанном вами порядке.

1 голос
/ 02 апреля 2009

Если это имеет значение, то вам действительно нужно установить зависимости в вашем make-файле, чтобы убедиться, что некоторые из них построены раньше других. На самом деле вы должны сначала спросить себя, почему это важно.

...