У меня есть Makefile:
TARGET = foobar
CXX = g++
CXXFLAGS = -Wall -I./inc/
LINKER = $(CXX) -o
LFLAGS = -I./inc/
SRCDIR = src
INCDIR = inc
OBJDIR = obj
BINDIR = bin
SOURCES := $(wildcard &(SRCDIR)/*.cpp)
INCLUDES := $(wildcard $(INCDIR)/*.h)
OBJECTS := $(SOURCES:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)
rm = rm -f
$(info SOURCES [${SOURCES}])
$(info INCLUDES [${SOURCES}])
$(info OBJECTS [${OBJECTS}])
$(BINDIR)/$(TARGET): $(OBJECTS)
@$(LINKER) $@ $(LFLAGS) $(OBJECTS)
@echo "Linking complete!"
$(OBJECTS): $(OBJDIR)/%.o : $(SRCDIR)/%.cpp
@$(CXX) $(CXXFLAGS) -c $< -o $@
@echo "Compiled "$<" successfully"
.PHONY: clean
clean:
@$(rm) $(OBJECTS)
@echo "Cleanup complete!"
.PHONE: remove
remove: clean
@$(rm) $(BINDIR)/$(TARGET)
@echo "Exacutable removed!"
Моя структура папок:
src/somesources.cpp
inc/somesources.h
obj/
bin/
Makefile
Этот make файл работает безупречно с c файлами, но у меня возникают проблемы с c++. Может ли кто-то сказать разницу между c и c++ и где я ошибаюсь? Выходное сообщение, которое я получаю:
SOURCES []
INCLUDES []
OBJECTS []
g++: fatal error: no input files
compilation terminated.
+ Изменить
SOURCES := $(wildcard &(SRCDIR)/*.cpp)
в
SOURCES := $(wildcard $(SRCDIR)/*.cpp)
Также,
.PHONE: remove
должно быть
.PHONY: remove
&(SRCDIR)
должно быть$(SRCDIR)
- 12-я строкаSOURCES := $(wildcard &(SRCDIR)/*.cpp)