gpt4 book ai didi

makefile - 如何在不带空格的Makefile中跨多行破坏变量定义?

转载 作者:行者123 更新时间:2023-12-04 07:02:33 24 4
gpt4 key购买 nike

考虑以下Makefile

CP = .:${HADOOP_HOME}/share/hadoop/common/lib/hadoop-auth-2.2.0.jar:\
${HADOOP_HOME}/share/hadoop/hdfs/hadoop-hdfs-2.2.0.jar:\
${HADOOP_HOME}/share/hadoop/common/hadoop-common-2.2.0.jar:\
${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.2.0.jar:\
${HADOOP_HOME}/share/hadoop/mapreduce/lib/hadoop-annotations-2.2.0.jar\

all:
echo $(CP)

运行 make的输出是
.:/home/hduser/Hadoop/hadoop-2.2.0/share/hadoop/common/lib/hadoop-auth-2.2.0.jar: /home/hduser/Hadoop/hadoop-2.2.0/share/hadoop/hdfs/hadoop-hdfs-2.2.0.jar: /home/hduser/Hadoop/hadoop-2.2.0/share/hadoop/common/hadoop-common-2.2.0.jar: /home/hduser/Hadoop/hadoop-2.2.0/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.2.0.jar: /home/hduser/Hadoop/hadoop-2.2.0/share/hadoop/mapreduce/lib/hadoop-annotations-2.2.0.jar

请注意,每个 :后都有空格。

有没有一种方法可以用换行符定义 CP变量,但是没有多余的空格替换每个换行符?

最佳答案

无法防止反斜杠换行符变成空格,并且以后尝试删除空格(如果应该有空格,该怎么办?)比较笨拙且容易出错,但是您可以在生成空格时将其删除。这具有在任何地方工作的显着优势,即使在函数内部调用的时也是如此。诀窍是将产生的空间嵌入到可扩展为零的表达式中。

使用空/未定义$(call foo)foo可以工作,但我们可以做得更好:变量名称可以在(GNU)Make中包含空格。很难分配给他们,但是我们还是不想。因此,我们可以将其缩短为$(a b)甚至$(a );反斜杠换行符将在查找之前变成一个空格。但是,即使只有一个空格也可以:

foo=bar$(\
)baz

最后,对于单字符变量名,可以省略括号:
foo=bar$\
baz

…最终看起来我们(完全)逃脱了换行符,而不是以某种方式使用它。无论如何,只要没有人分配“”(甚至比使用它还要疯狂!)。

关于makefile - 如何在不带空格的Makefile中跨多行破坏变量定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21223880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com