нет такой файл или каталог ошибка в Makefile с addprefix? - PullRequest
0 голосов
/ 24 марта 2020

Правило addprefix в моем make-файле по какой-то причине не добавляет «src /» перед моим «SRC_FILES», я попытался прослушать «SR C» с помощью printf, и оно показывает только src/, и я получаю следующая ошибка: error: main.c: No such file or directory Я не понимаю, почему правило addprefix здесь не работает. Заранее спасибо.

SRC_DIR = src/ 

SRC_FILES   = main.c

TEST     = tests/test.c

CFLAGS  += -I $(IDIR) -Wall -Wextra -lm

SRC     = $(addprefix $(SRC_DIR), $(SRC_FILES))

all: $(BIN_NAME)

$(BIN_NAME):
        @cd $(LIB_DIR) ; make re
        @cp $(LIB_DIR)/$(LIB_NAME) ./$(LIB_NAME)
        @printf "debug -> "$(SRC) #trying to debug here.
        @gcc -o $(BIN_NAME) $(SRC) $(LIB_NAME) $(CFLAGS) #get error here.

1 Ответ

4 голосов
/ 24 марта 2020

Самое первое, что вы никогда не должны добавлять @ к своим строкам рецепта, или если вы действительно должны иметь их, вы никогда не должны добавлять их до после , ваш 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, это было бы довольно ясно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...