我在不同的文件夹中有多个文件,我需要将它们复制到一个包含文件夹中:
前 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 变量列表 - 有谁知道如何依次复制所有文件?
谢谢
马特
你的规则有问题:
$(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)
| 归档时间: |
|
| 查看次数: |
9658 次 |
| 最近记录: |