gpt4 book ai didi

java - 使用 GNU make 将 java 内部类文件包含到 JAR

转载 作者:搜寻专家 更新时间:2023-11-01 02:52:02 25 4
gpt4 key购买 nike

我有一个 java 项目,它使用 GNU make 来编译源文件并创建一个 JAR。在我引入嵌套枚举之后,将创建一个新文件 main_classname$inner_classname.class

我在将此文件包含在 JAR 中时遇到问题。

下面是我的 Makefile 的相关部分:

JARNAME=Project.jar

CLASSES=\
Main.class \
Main$$Inner.class

这是 Makefile 包含的 targets 文件的摘录:

$(JARNAME): $(CLASSES)
jar cvf $(JARNAME) $(CLASSES)

内部类没有被添加到 JAR 中,因为 shell 扩展了美元符号后的字符串。

我尝试在 $$ 前加一个反斜杠,即 Main\$$Inner.class,但提示:

make: * No rule to make target Main\$Inner.class', needed
by
Project.jar'. Stop.

另一种方法是尝试进行以下更改以使美元转义,但无济于事:

ESCAPED_CLASSES=$(patsubst %$$,%\$$,$(CLASSES))
$(JARNAME): $(CLASSES)
jar cvf $(JARNAME) $(ESCAPED_CLASSES)

可以做些什么来克服这个问题,尤其是在不将特殊情况硬编码到 targets 文件的情况下?

最佳答案

(未经测试)

如果您不能只对所有类文件使用通配符来获取文件名,而是需要明确命名它,您需要告诉 Make 您的美元符号美元符号!

这是通过使用另一个美元符号转义来完成的。来自 http://www.gnu.org/software/make/manual/make.html#Rule-Syntax

Because dollar signs are used to start make variable references, if you really want a dollar sign in a target or prerequisite you must write two of them, ‘$$’ (see How to Use Variables). If you have enabled secondary expansion (see Secondary Expansion) and you want a literal dollar sign in the prerequisites list, you must actually write four dollar signs (‘$$$$’).

在这种情况下,您需要两个 真正的美元符号。根据这个,它意味着 Makefile 中的四个甚至 八个 美元符号。

关于java - 使用 GNU make 将 java 内部类文件包含到 JAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9363151/

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