Shell 生成文件递归
我目前正在做一个比过去更大的项目,因此我将文件组织在一棵树中(见下文) 我仍在学习如何制作makefiles,但在最后几行中,我仍然得到一个“与目标模式不匹配”。任何帮助都将不胜感激Shell 生成文件递归,shell,makefile,Shell,Makefile,我目前正在做一个比过去更大的项目,因此我将文件组织在一棵树中(见下文) 我仍在学习如何制作makefiles,但在最后几行中,我仍然得到一个“与目标模式不匹配”。任何帮助都将不胜感激 ########################################## # Editable options # ########################################## # Title EXECUTABLE_NAME=net
##########################################
# Editable options #
##########################################
# Title
EXECUTABLE_NAME=net
# Compiler options
CC=g++
CFLAGS= -Wall
LDFLAGS= -Wall
# Folders
SRC_DIR=Source
BLD_DIR=Build
BIN_DIR=Bin
HDR_DIR=$(SRC_DIR)/Include
#########################################################
# Do Not Touch This #
#########################################################
SOURCE_FILES := $(shell find $(SRC_DIR)/ -type f -name '*.cpp')
SOURCE_FILE_NAMES := $(shell find $(SRC_DIR)/ -type f -name '*.cpp' -printf "%f\n")
HEADER_FILES := $(wildcard $(HDR_DIR)*.h)
OBJECT_FILES := $(SOURCE_FILE_NAMES:.cpp=.o)
EXECUTABLE_FILES = $(EXECUTABLE_NAME:%=$(BLD_DIR)/%)
build: $(EXECUTABLE_FILES)
clean:
rm -r -f $(BIN_DIR)
.PHONY: build clean
$(EXECUTABLE_FILES): $(OBJECT_FILES)
@$(CC) $(LDFLAGS) -o $@ $^
@echo "Build successful!"
$(OBJECT_FILES): $(BIN_DIR)/%.o: $(SRC_DIR)/**/%.cpp
@echo Compiling $^
@$(CC) $(CFLAGS) -o -c $@ $^
因此,具体问题是:
$(OBJECT_FILES): $(BIN_DIR)/%.o: $(SRC_DIR)/**/%.cpp
您的$(OBJECT_文件)
将与源文件位于同一目录中,它们将包括source/Components/afolder/qwerty.o
之类的内容。但这与Bin/%.o
不匹配,所以该模式规则不适用。因此,您没有构建对象的规则。您只需要%.o:%.cpp
就可以了
还要注意的是,您不需要使用
shell
来获取文件名。您可以使用$(notdir$(源文件))
获得相同的效果
此外,在头文件的定义中缺少/
$(OBJECT_FILES): $(BIN_DIR)/%.o: $(SRC_DIR)/**/%.cpp