Я использую Makefile для копирования файлов и символических ссылок из исходной структуры каталога в целевой каталог, который в конечном итоге будет превращен в образ файловой системы. Идея состоит в том, чтобы получить относительный путь для каждого файла или символической ссылки с помощью find, а затем добавить соответствующий префикс пути для создания путей источника и назначения для cp -a.Symlinks and make flags в цепочке Make-файлов
CW_SOURCES := $(patsubst %,$(SOURCE)/%,$(shell find $(LOCAL_PATH)/filesystem -type f -o -type l))
CW_DESTS := $(subst $(SOURCE)/$(LOCAL_PATH)/filesystem,$(TARGET),$(CW_SOURCES))
$(CW_DESTS): $(TARGET)/% : $(SOURCE)/$(LOCAL_PATH)/filesystem/%
@echo $< to [email protected]
$(eval CW_DIR := $(dir [email protected]))
mkdir -p $(CW_DIR)
cp -a $< [email protected]
Это прекрасно работает, до тех пор, как я призываю сделать с
make --check-symlink-times all,
make -L all,
в противном случае сделать не рассматривать символические ссылки как объекты и сам по себе, а как отсутствующим зависимостям (потому что симлинки DON» t обязательно указывать на что-либо реальное в этой точке).
Пожалуйста, не говорите мне, что символические ссылки несовместимы на всех платформах, которые запускаются, я это знаю.
Так что проблема заключается в том, что этот Makefile запускается где-то по линии в длинном списке Make-файлов, вызывающих друг друга, поэтому я не могу вызвать make с флагом, который ему нужен для этого Makefile.
Просто интересно, если кто-нибудь видит путь вокруг этой проблемы, кроме очевидного (очевидное существо не рассматривает символические ссылки как цели и просто копирует их каждый раз). Для этого Makefile должны быть доступны несколько глобальных переменных, которые определены в других Makefiles в цепочке.