所以我有一些有效的规则:
# Folders
SRCDIR = src
SUBFOLDERS = test test/test2
OBJDIR = obj
# Just for me so I can read my own makefile :o
_TARGET = $@
_DEPEND = $<
# Get sources from /src and /src/test/ and /src/test/test2/
SOURCES = $(wildcard $(SRCDIR)/*.cpp ))
SOURCES = $(wildcard $(SRCDIR)/test/*.cpp ))
SOURCES = $(wildcard $(SRCDIR)/test/test2/*.cpp ))
OBJECTS = $(addprefix $(OBJDIR)/, $(patsubst src/%, %, $(SOURCES:.cpp=.o))
# Main target 'make debug'
debug: debugging $(OBJECTS)
@echo building: gcc $(OBJECTS) -o out.exe
# Compiling each file
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
g++ -c $(_DEPEND) -o $(_TARGET)
debugging:
@echo $(SOURCES)
@echo $(OBJECTS)
注意:我不得不手工复制此代码,因此可能会出现一些错误,但希望清楚我想要做的事情。
假设我想添加更多源文件子文件夹:src/another, src/andanother
。现在我必须添加更多SOURCES = ...
行来执行此操作。有没有办法在规则中这样做。我一直在修补它,但我无法提出有效的规则。我想要的是我将一个新文件夹添加到SUBFOLDERS
列表中,我的代码会自动获取.cpp文件。
注意我不想使用像$(shell find ... )
这样的东西,因为Windows很糟糕,我希望它像可能的Windows / Linux一样便携。
答案 0 :(得分:2)
你可以使用make的foreach。 像:
SOURCES = $(foreach dir,${SUBFOLDERS},$(wildcard ${dir}/*.cpp))
更多信息: https://www.gnu.org/software/make/manual/html_node/Foreach-Function.html