Почему предварительное условие для целевого файла отображается пустым?

#makefile #gnu-make

#makefile #gnu-make

Вопрос:

 ifdef CUSTOM_CONFIG
rom: chk_custom_cfg create_custom_binaries
else
rom: create_binaries
endif

chk_custom_cfg:
ifdef CUSTOM_CONFIG
    export CUSTOM_CONFIG 
    $(eval CUST_CFG_DATA_FILES=$(CUSTOM_CONFIG)) 
    export CUST_CFG_DATA_FILES
    $(eval CUST_CFG_DATA_MEM_FILES=$(addprefix bin/,$(notdir $(CUST_CFG_DATA_FILES:.csv=.mem)))) 
    export CUST_CFG_DATA_MEM_FILES 
    $(eval CUST_CFG_DATA_BIN_FILES=$(addprefix bin/,$(notdir $(CUST_CFG_DATA_MEM_FILES:.mem=.bin))))
    export CUST_CFG_DATA_BIN_FILES 
    $(eval CUST_COMBINED_BIN_FILES=$(subst .bin,_combined.bin,$(CUST_CFG_DATA_BIN_FILES)))
    export CUST_COMBINED_BIN_FILES 
    @echo existing cfg files $(CUST_CFG_DATA_FILES)
    @echo existing mem files $(CUST_CFG_DATA_MEM_FILES)
    @echo existing bin files $(CUST_CFG_DATA_BIN_FILES)
    @echo existing combined files $(CUST_COMBINED_BIN_FILES)
endif
build_images: copy_ops_imgs 

create_binaries: config  $(COMBINED_BIN_FILES)

create_custom_binaries: cust_config $(CUST_COMBINED_BIN_FILES)
    @echo print all the pre required $^
    @echo custom config bin files $(CUST_CFG_DATA_BIN_FILES)
    @echo custom config bin files $(CUST_COMBINED_BIN_FILES)
  

В целевом файле create_custom_binaries при печати $^ только получение cust_config , я ожидаю $(CUST_COMBINED_BIN_FILES) также части предварительного условия для целевого файла cust_config

 $(CUST_COMBINED_BIN_FILES) is set when CUSTOM_CONFIG is defined.

e.g:make --debug CUSTOM_CONFIG=.config.csv rom.
  
  • Почему предварительное условие $ (CUST_COMBINED_BIN_FILES) пусто для целевого файла
  • create_custom_binaries? в то время как @echo пользовательские конфигурационные bin-файлы $(CUST_COMBINED_BIN_FILES) дают правильное значение!!

Я ценю любые указания на это. Моя цель — создать другую цель на основе входных данных, сохраненных в CUSTOM_CONFIG

Комментарии:

1. Почему вы устанавливаете переменные make из рецептов с помощью eval ? Эти конструкции раскрываются только тогда, когда make передает рецепт командной строке, а не когда она анализирует Makefile. Как насчет использования вместо этого if условия ? Что-то вроде CUST_COMBINED_BIN_FILES := $(if $(CUSTOM_CONFIG),something,something-else) , присваивающее переменной то или иное значение CUST_COMBINED_BIN_FILES в зависимости от того, установлена переменная CUSTOM_CONFIG или нет.

2. Спасибо Renaud Pacalet, это сработало.

3. @C_Enthu Пожалуйста, добавьте ответ и закройте вопрос, если это сработает.