Я использую общий library.so
, чтобы избежать перекомпоновки исполняемых файлов (которые связаны с ним), когда только реализация (library.cpp
), но не интерфейс (library.hpp
), имеет изменилось, т.е.Как выражать зависимость от общей библиотеки при создании многопоточных
obj/library.o: library.cpp library.hpp
lib/library.so: obj/library.o
program : program.cpp library.hpp
$(CXX) program.cpp -Llib -lrary
Таким образом, program
не зависит от library.cpp
или library.so
. Однако, когда вы делаете это с нуля (вместо того, чтобы переделывать его из-за изменений в некоторых файлах), library.so
должен быть сделан до program
. Это может быть обеспечено путем установки:
default: library.so program
Но при использовании make -j
это сломано.
Так что правильный способ 1) обеспечить library.so
производится до program
но 2) избежать повторного создания program
если только library.cpp
изменилось?
Что многопоточность нужна сделать с этим вопросом? –
@EtanReisner 'make -j' использует несколько потоков: он может начать делать' program' в одном потоке, прежде чем заканчивать создание 'library' на других. – Walter
На самом деле он запускает несколько процессов, а не потоков, но это также не имеет отношения к точке. Ваш make-файл, как написано, нарушается при запуске 'make program' в чистом каталоге, не имеющем ничего общего с' make -j' или несколькими процессами/etc. –