Нет ошибки входного файла после реализации подстановочных знаков - PullRequest
0 голосов
/ 28 марта 2019

Задача

У меня есть Makefile, и я проделал некоторую утомительную работу по заданию всех моих подпрограмм: от A.o до K.o (все находятся в каталоге source) при определении OBJ, как показано ниже. Вот мой Makefile, и он работает как положено.

Метод, который работает

ProjectName = SomeName
CXX = g++ -std=c++11
CXXFLAGS = -c -Wall

OBJ = build/main.o build/A.o \
build/B.o build/C.o \
build/D.o build/E.o \
build/F.o build/G.o \
build/H.o build/I.o \
build/J.o build/K.o \

all: $(ProjectName)

$(ProjectName): $(OBJS)
    $(CXX) -o $@ $(OBJS)

build/%.o: source/%.cpp
    $(CXX) -o $@ $(CXXFLAGS) $<

Однако, чтобы избежать этой утомительной работы, я применил подстановочный знак $(wildcard source/*.cpp), и я думаю, что он должен работать, потому что я называю все эти файлы с расширением .o, которые находятся в каталоге source

Методы, которые не работают

ProjectName = SomeName
CXX = g++ -std=c++11
CXXFLAGS = -c -Wall

SRC := $(wildcard source/*.cpp)
OBJ := $(patsubst source/%.cpp, build/%.o, $(SRC))

all: $(ProjectName)

$(ProjectName): $(OBJS)
    $(CXX) -o $@ $(OBJS)

build/%.o: source/%.cpp
    $(CXX) -o $@ $(CXXFLAGS) $<

Однако, это показывает мне ошибку:

g++: fatal error: no input files compilation terminated.

Любая помощь будет оценена.

1 Ответ

1 голос
/ 28 марта 2019

Я считаю, что это простая опечатка: вы называете свой массив OBJ, но ссылаетесь на него как OBJS.

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