target: TargetA ../DirB/FileB.cpp ../DirC/FileC.o ../DirD/FileD.o ...
这是 make 文件中的一长行。是否可以将其分成几行?
来自文档https://www.gnu.org/software/make/manual/make.html#Splitting-Lines
Makefile 使用“基于行”的语法,其中换行符是特殊的,标记语句的结束。 GNU make 对语句行的长度没有限制,最多取决于计算机的内存量。
但是,如果不换行或滚动,则很难阅读太长而无法显示的行。因此,您可以通过在语句中间添加换行符来格式化 makefile 以提高可读性:您可以通过使用反斜杠 (\) 字符转义内部换行符来实现此目的。
它也适用于目标,即:
a b c d:
touch $@
multiline_dependencies: a \
b \
c \
d
touch $@
并验证,
make multiline_dependencies --dry-run
给出以下输出
touch a
touch b
touch c
touch d
touch multiline_dependencies
有几种方法可以做到这一点。一种简单的方法:
# example 1
target: targetA targetB
target: targetC targetD
target:
@echo $@ is dependent on $?
请注意,这不适用于模式规则(目标/依赖项中带有
%
的规则)。如果您正在使用模式规则(即使您没有),您可以考虑执行以下操作:
# example 2
TARGET_DEPS := targetA targetB
TARGET_DEPS += targetC
TARGET_DEPS += targetD
target: $(TARGET_DEPS)
@echo $@ is dependent on $?
虽然可以使用反斜杠,但我个人发现这会使 makefile 更难阅读,因为缩进的含义变得不清楚。