У меня есть следующий файл make, и я знаю, что неправильно записывать следующие две строки в цель FLAT_SRC_DIR
@FLAT_SRC_FILES := $(wildcard $(FLAT_SRC_DIR)/*.cpp)
@$(OBJ_FILES) += $(patsubst $(FLAT_SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$$(FLAT_SRC_FILES)))
Как мне исправить эти две строки, чтобы я мог использовать FLAT_SRC_FILES в качестве переменной и обновить переменную OBJ_FILES в следующей строке.
PROJ_DIR := ../
SRC_DIR += $(PROJ_DIR)project
SRC_FILES += $(wildcard $(SRC_DIR)/*/source/*.cpp)
OBJ_DIR := $(PROJ_DIR)TASK
OBJ_FILES += $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES))
CXXFLAGS := --c++14
CC_INCLUDE_PATH += -I$(PROJ_DIR)project/include
.PHONY: all clean dirs
all: dirs $(OBJ_DIR) $(FLAT_SRC_DIR) $(OBJ_FILES)
"$(COMPILERBIN)"/cc.exe -rvn crackLib.a $(OBJ_FILES)
clean:
@rm -rf crackLib.a $(OBJ_DIR) $(FLAT_INC_DIR)
$(FLAT_SRC_DIR):
@echo 'Making flat source folder.'
@mkdir -p $(FLAT_SRC_DIR)
@OLD_CWD=$(CURDIR)
@cd $(FLAT_SRC_DIR)
@find $(SRC_FILES) -name '*.cpp' | xargs -i cp -l {} $(FLAT_SRC_DIR)
@cd $(OLD_CWD)
@FLAT_SRC_FILES := $(wildcard $(FLAT_SRC_DIR)/*.cpp)
@$(OBJ_FILES) += $(patsubst $(FLAT_SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$$(FLAT_SRC_FILES)))
# Build target for directory creation. Intermediate build files will be placed here.
$(OBJ_DIR):
mkdir -p $@
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
"$(COMPILERBIN)"/cc.exe $(CXXFLAGS) -c -o $@ $< $(CC_INCLUDE_PATH)
$(OBJ_DIR)/%.o: $(TSM_SRC_DIR)/%.cpp
"$(COMPILERBIN)"/cc.exe $(CXXFLAGS) -c -o $@ $< $(CC_INCLUDE_PATH)
$(OBJ_DIR)/%.o: $(SL_SRC_DIR)/%.cpp
"$(COMPILERBIN)"/cc.exe $(CXXFLAGS) -c -o $@ $< $(CC_INCLUDE_PATH)
-include $(OBJ_FILES:.o=.d)