Приведенный ниже make-файл не имеет цели для создания OBJECTS, но, тем не менее, make формирует правило, создает OBJECTS и делает финальный файл all.exe. Я не уверен, как это работает. Есть ли в make механизм создания правил, если они не доступны в make-файле для зависимостей?
SOURCE=$(wildcard Source/\*.cpp)
TEST=$(wildcard Source/Tests/\*.cpp)
OBJECTS=$(SOURCE:.cpp=.o) $(TEST:.cpp=.o)
CXXFLAGS= -O3 -fstack-usage -MMD
all:$(OBJECTS)
g++ $(CXXFLAGS) -o $@ $(OBJECTS)
print::
@echo $(SOURCE)
@echo $(OBJECTS)
@echo $(TEST)
clean:
rm -rf Source/*.o Source/Tests/*.o *.exe
Вывод на консоль:
$ make
g++ -O3 -fstack-usage -MMD -c -o Source/main.o Source/main.cpp
g++ -O3 -fstack-usage -MMD -c -o Source/Tests/TestList.o Source/Tests/TestList.cpp
g++ -O3 -fstack-usage -MMD -c -o Source/Tests/TestLinkedlist.o Source/Tests/TestLinkedlist.cpp
g++ -O3 -fstack-usage -MMD -o all Source/main.o Source/Tests/TestList.o Source/Tests/TestLinkedlist.o
Структура папки: