在makefile中指定目标配方中的变量值。

问题描述 投票:0回答:1

我的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)
makefile gnu-make
1个回答
1
投票

如果这真的是你的目标,那么这里有一个方法可以做到。

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

还有更复杂的方法 但可以等你把这个方法用好了再用。

© www.soinside.com 2019 - 2024. All rights reserved.