我正在使用Makefile将文件和符号链接从源目录结构复制到目标目录中,最终将其作为文件系统映像。我们的想法是使用find获取每个文件或符号链接的相对路径,然后添加适当的路径前缀以创建cp -a的源和目标路径。
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 $@
$(eval CW_DIR := $(dir $@))
mkdir -p $(CW_DIR)
cp -a $< $@
这个工作正常,只要我用
调用makemake --check-symlink-times all,
make -L all,
否则make不会将符号链接视为对象本身,而是作为缺少的依赖项(因为符号链接不一定指向此处的任何实际内容)。
请不要告诉我符号链接在所有平台上都不兼容make run,我知道。
所以问题是这个Makefile是在MakeFiles长调用列表中的某个地方运行的,所以我不能用make这个Makefile所需的标志调用make。
只是想知道是否有人看到解决这个问题的方法而不是明显的(显而易见的是不要将符号链接视为目标并且每次只复制它们)。在Makefile中,其他Makefile中定义的几个全局变量也需要可用。