Вопрос

Предположим, у меня есть несколько файлов C++:A.cc, B.cc, C.cc и связанные с ними файлы заголовков.A.cc использует классы B.cc и так далее.

Теперь предположим, что я хочу собрать исходные файлы.Могу ли я теоретически скомпилировать (не связать) все файлы после этапа предварительной обработки одновременно?(A.cc -> A.obj, ...)

Мне просто интересно, будет ли когда-нибудь момент, когда мне придется ждать, пока я закончу компиляцию A.cc, прежде чем компилировать B.cc.

Это было полезно?

Решение

Нет, если вы действительно не делаете что-то странное, подборку B.cc буду нет зависеть от результата компиляции A.cc (наоборот). Поэтому make -j (работает несколько «рабочих мест», т. Е. Процессы, параллельно, каждый из которых составляют файл в то же время) - это популярное использование, особенно конечно, на многоядерных машинах (но не те только, поскольку даже без нескольких ядер небольшое количество одновременных рабочих мест мая В конце концов, более быстрее, чем тот же набор рабочих мест, произвольно сериализованный - можно заблокировать ожидание диска ввода / вывода, в то время как другой отключил CPU-интенсивную часть компиляции ...) ... до тех пор, пока вы делаете Есть достаточно доступной физической памяти, то есть ;-).

Другие советы

Это то, для чего ходят заголовки, верно? Make -j n сделает это для вас, хотя оно делает его на основе падающих пользователей Makefiles.

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

Расширения на конце файлов более или менее бессмыслены. Что важно в том, что у вас есть полное определение для всех классов, которые вы пытаетесь компилировать, даже если они еще не реализованы. Поскольку расширения .h и .cc или .CPP являются произвольными, что имеет значение больше всего, является содержание файлов.

Вообще говоря, если вы можете полностью описать объект класса, то вы не будете работать с проблемами. Если определение класса еще не существует в цепочке, которую вы настроили (что может произойти с циркулярно-зависимыми заголовками), то вы должны сделать магию.

Дело в том, что это действительно зависит от вас как дизайнер / разработчик, если вы столкнетесь с этой проблемой

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top