Самое первое, что вы никогда не должны добавлять @
к своим строкам рецепта, или если вы действительно должны иметь их, вы никогда не должны добавлять их до после , ваш makefile уже работает. Подавление этого вывода удаляет лучший инструмент отладки, который у вас есть.
Если у вас не было префикса @
, вы сразу увидите, в чем проблема. Как говорит GM, у вас есть лишние пробелы в конце вашей строки SRC_DIR = src/
. Make сохраняет за собой пробелы в конце строк.
Это означает, что SRC
содержит строку src/ main.c
вместо src/main.c
.
Причина, по которой ваш printf
ведет себя следующим образом: что вы оставили переменную вне кавычек. Итак, вызываемая команда оболочки:
printf "debug -> "src/ main.c
, что означает, что строка формата, переданная в printf, равна debug -> src/
и main.c
является первым аргументом, но ваша строка формата не содержит %s
или что-то еще, так что игнорируется. Если бы вы включили переменную make в кавычки, то вы также увидели бы проблему:
printf "debug -> $(SRC)"
даст:
printf "debug -> src/ main.c"
Тогда ваша строка компиляции будет такой:
gcc -o bin src/ main.c ...
Опять же, если у вас не было префикса @
, и вы могли видеть вызванные команды make, это было бы довольно ясно.