#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 Пожалуйста, добавьте ответ и закройте вопрос, если это сработает.