Makefile 链中的符号链接和标志

Symlinks and make flags in chain of Makefiles

我正在使用 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 $< $@

这工作正常,只要我用

调用 make
make --check-symlink-times all,
make -L all,

否则 make 不会将符号链接视为对象本身,而是将其视为缺失的依赖项(因为此时符号链接不一定指向任何真实的东西)。

请不要告诉我符号链接在所有平台上都不兼容,运行s on,我知道。

所以问题是这个 Makefile 在一长串相互调用的 Makefile 中的某处 运行,所以我不能用这个 Makefile 需要的标志来调用 make。

只是想知道除了显而易见的问题之外是否有人看到解决此问题的方法(显而易见的是不要将符号链接视为目标并且每次都复制它们)。链上其他 Makefile 中定义的几个全局变量也需要可供此 Makefile 使用。

您可以修改makefile文件顶部的MAKEFLAGS variable

MAKEFLAGS += -L