Назначьте значения переменных в рецепте цели в make-файле - PullRequest
0 голосов
/ 07 мая 2020

У меня есть следующий файл 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)

1 Ответ

1 голос
/ 07 мая 2020

Если это действительно ваша цель, то вот способ сделать это:

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

Есть более сложные методы, но они могут подождать, пока у вас не заработает этот.

...