Спасибо за ваш ответ. Я узнал, что проблема была в правиле, как вы сказали. Я изменил на $ (DIR_OBJ) /%. O: $ (DIR_SR C) /%.cpp (до этого было. c вместо. cpp :)), и теперь он работает с изменением DIR_SR C. Я не наблюдал этого, поскольку смог собрать из текущего каталога, но понял после вашего ответа о встроенном правиле.
Другие вопросы: 1) Имеет ли это правило: $ (DIR_OBJ) /%. O : $ (DIR_SR C) /%.cpp $ (CXX) $ (CFLAGS) $ {CPPFLAGS} $ {DEPS} - c $ <-o $ @ </p>
говорит следующее: делать скомпилируйте все. cpp файлы и создайте из него файлы .o и поместите файлы .o в DIR_OBJ?
2) Почему я не могу изменить местоположение DIR_OBJ, например: DIR_OBJ = .. / test, а затем использовать hello_world_test: $ (DIR_OBJ) /hello_world_test.o для сборки исполняемого файла?
Когда я это делаю, я получаю сообщение об ошибке: не могу найти hello_world_test.o: нет такого файла или каталога.
I обратите внимание, что файлы .o и .d создаются в каталоге, в котором определен DIR_OBJ (либо в ./, либо в ../test), а затем меня несколько смущает, почему hello_world_test не может выполнить прекрасную предпосылку $ (DIR_OBJ) /hello_world_test.o, но он смотрит только в текущей папке, где находится Makefile.