Задача
У меня есть 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.
Любая помощь будет оценена.