将 Makefile 中的长依赖项分成几行

问题描述 投票:0回答:2

target: TargetA ../DirB/FileB.cpp ../DirC/FileC.o ../DirD/FileD.o ...

这是 make 文件中的一长行。是否可以将其分成几行?

makefile
2个回答
38
投票

来自文档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

28
投票

有几种方法可以做到这一点。一种简单的方法:

# 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 更难阅读,因为缩进的含义变得不清楚。

© www.soinside.com 2019 - 2024. All rights reserved.