2016-09-03 3 views
0

Я использую 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 в цепочке.

ответ