Зависимость от объектных файлов, которые создаются в разных двоичных файлах - PullRequest
0 голосов
/ 17 января 2020

Существуют некоторые объектные файлы, например a.o и b.o, созданные при создании двоичного файла engine.

Makefile

.PHONY all
all: engine cars

Теперь для этого второго двоичного файла cars нужны файлы .o a.o и b.o, созданные при создании двоичного файла engine

Проблема здесь Я использую make -j для компиляции, что в некоторых случаях приводит к тому, что объектные файлы не создаются и, следовательно, undefined reference ошибки. Проблема не видна с make -j 5.

Есть ли какой-нибудь способ заставить его работать параллельно с make -j

1 Ответ

0 голосов
/ 17 января 2020

Как правило, make, даже с указанным -j, будет пытаться построить зависимости слева направо. Таким образом, в вашем рабочем случае сначала начинается сборка engine, а затем сборка car. Если двигатель завершает сборку до того, как car запустится, значит, все в порядке, в противном случае это не так.

В вашем случае, я представляю, что у вас есть четыре других процесса высокого уровня, которые строятся вместе с engine, который заменяет выполнение car, и, таким образом, engine происходит с fini sh до car при сборке с низкими значениями -j.

В любом случае, вам не хватает некоторые зависимости. Вам нужно либо:

car : a.o b.o

, если автомобиль зависит от этих двух. Если a.o и b.o являются побочными эффектами рецептов engine, вы можете сделать

car : engine

Примечание: даже если ваш make-файл работал с низкими значениями -j, Makefiles не должен принимайте порядок сборки слева направо и не делайте предположений о времени выполнения каких-либо рецептов - так что ваш make-файл действительно был поврежден с самого начала.

...