Makefile - 将多个文件夹中的头文件复制到一个包含依赖项的文件夹中

Mat*_*son 2 makefile

我在不同的文件夹中有多个文件,我需要将它们复制到一个包含文件夹中:

make

../security/security_features.h
../this/this_features.h
    [etc]
../that/that_features.h
Run Code Online (Sandbox Code Playgroud)

make

./include/security_features.h
./include/this_features.h
    [etc]
./include/that_features.h
Run Code Online (Sandbox Code Playgroud)

./include 文件夹中的文件都需要依赖各个文件夹中的文件。

Makefile 对我来说有点神秘,我尝试阅读手册并了解如何创建依赖项:

./include/security_features.h: ../security/security_features.h
    @cp -av $< $@
Run Code Online (Sandbox Code Playgroud)

但是我必须对我的所有文件都这样做 - 还有另一种更优雅的方式吗?

理想情况下,我只想编写分散文件夹中各种文件的 Makefile 变量,并且 makefile 知道将该变量中的所有文件复制到包含文件夹中。

有没有 Makefile 大师?

谢谢,

马特

更新:

我已经设法做这样的文件列表:

INCLUDES_SRC := ../security/security_features.h ../this/this_features.h
INCLUDES_DST := $(addprefix ./include/,$(notdir $(INCLUDES_SRC)))
Run Code Online (Sandbox Code Playgroud)

并且可以使一个依赖于另一个:

$(INCLUDES_DST): $(INCLUDES_SRC)
    @cp -av $< $@
Run Code Online (Sandbox Code Playgroud)

然而,这只是将第一个先决条件 ( ../security/security_features.h) 两次复制到两个目标 ( ./include/security_features.h, ./include/this_features.h):

'../security/security_features.h' -> './include/security_features.h'
'../security/security_features.h' -> './include/this_features.h'
Run Code Online (Sandbox Code Playgroud)

所以我现在有一个文件的 src 和目标位置的 make 变量列表 - 有谁知道如何依次复制所有文件?

谢谢

马特

Bet*_*eta 5

你的规则有问题:

$(INCLUDES_DST): $(INCLUDES_SRC)
    @cp -av $< $@
Run Code Online (Sandbox Code Playgroud)

是它使每个源头成为每个目标头的先决条件,并且只复制第一个(带有$<)。

这将做到:

.PHONY: INCLUDES
INCLUDES: $(INCLUDES_DST)

include/%: %
        cp $^ include

vpath %.h security this
Run Code Online (Sandbox Code Playgroud)

粗略地翻译,这意味着“制作include/something、查找something并将其复制到include/,并且在查找表单文件时x.h,在security/和 中查找this/”。

(请注意,如果您有两个同名的标题,这将错过其中一个,但在这种情况下,您include无论如何都无法将它们都放入。)

如果您有很多源目录并且不想全部输入,Make 可以跟踪它们:

INCLUDE_PATHS := $(dir $(INCLUDES_SRC))

vpath %.h $(INCLUDE_PATHS)
Run Code Online (Sandbox Code Playgroud)