我的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)
如果这真的是你的目标,那么这里有一个方法可以做到。
OBJ_FILES := $(patsubst %.cpp,$(OBJ_DIR)/%.o,$(notdir $(SRC_FILES)))
.PHONY: flat_source_dir
flat_source_dir:
@for f in $(SRC_FILES); do cp $$f flat/; done
还有更复杂的方法 但可以等你把这个方法用好了再用。