Makefile не связывает требуемую зависимость

Нечувствительное к регистру -и сохраняющее регистр -поведение — это старый выбор, сделанный Apple, и мне кажется, что оболочка просто повторяет все, что вы вводите. (Попробуйте LS /BIN/CP. )Это поведение, наконец, устранено, и, к счастью, с введением APFS , файловой системы Apple, которая должна быть доступна этой осенью с грядущей macOS High Sierra. Он также будет на watchOS, tvOS, iOS. Хотя HFS+ может быть отформатирован с учетом регистра -, не все программы могут различить разницу.

-1
19.10.2019, 18:42
1 ответ

В этой части Makefile:

bin/BridgeSolution : build/main.o   build/Person.o build/State.o
        $(CXX) $(CXXFLAGS) -o $@ $?
bin/TestPerson     : build/Person.o build/PersonTests.o
        $(CXX) $(CXXFLAGS) -o $@ $?
bin/TestState      : build/State.o  build/StateTests.o
        $(CXX) $(CXXFLAGS) -o $@ $?

нужно использовать $^, а не $?. $?представляет подмножество пререквизитов, которые новее, чем цель; таким образом, когда вы редактируете PersonTests.cppпосле сборки TestPerson, выполните перестроение PersonTests.o, и это единственное необходимое условие TestPerson, которое новее, чем TestPerson, поэтому $?становится TestPerson.o.

Если написать

        $(CXX) $(CXXFLAGS) -o $@ $^

вместо этого рецепт будет постоянно включать все предварительные условия.

1
28.01.2020, 05:09

Теги

Похожие вопросы