gpt4 book ai didi

以 "#"开头的文件的 Makefile 问题

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

我有一个目录“FS2”,其中包含以下文件:

  • 啊啊

  • 这个
  • 那个

我有一个包含以下内容的 makefile。

Template:sh= ls ./FS2/*
#all: $(Template)
echo "Template is: $(Template)"
touch all

当我运行“clearmake -C sun”并且文件“all”不存在时,我得到以下输出:

"Template is: ./FS2/#ARGH# ./FS2/that ./FS2/this"

修改“this”或“that”不会导致“all”重新生成。当使用“-d”进行调试时,“all”目标仅依赖于目录“./FS2”,而不依赖于该目录中的三个文件。我确定,当它展开"template"时,“#”将被视为注释的开头,而该行的其余部分将被忽略!

该问题是由编辑器引起的,该编辑器在被杀死后会留下以“#”开头的文件。如果这些文件之一存在,则对该目录中的文件进行任何修改都会导致“所有”重新生成。

虽然,我不想使编译依赖于临时文件是否已被修改,并且会从“Template”变量中删除该文件,但我仍然很好奇如果我这样做了如何让它工作想要将“#ARGH#”视为规则“all”所依赖的文件名。这可能吗?

最佳答案

I have a directory "FS2" that contains the following files: #ARGH# ...

这就是你的问题所在。在我看来,在文件名中使用“有趣”的字符是不明智的。现在我知道这些字符是允许的,但这并不意味着它们是一个好主意(也允许使用诸如退格键之类的 ASCII 控制字符,但会产生类似的烦人结果)。

我什至不喜欢文件名中的空格,更喜欢 SomethingLikeThis 在文件名中显示独立的单词,但至少许多 UNIX 工具中处理空格的工具是众所周知的。

我的建议是重命名该文件(如果该文件是您的文件),这样可以避免一些焦虑。但是,由于它们是编辑器崩溃时留下的临时文件,因此请在规则开始在 makefile 中运行之前删除它们。无论如何,您可能不应该基于编辑器临时文件进行重建。

或者使用更有针对性的模板,例如: Template:sh= ls ./FS2/[A-Za-z0-9]* 完全绕过这些文件(这只是一个示例,您应该确保它不会快速排除应该包含的文件)。

关于以 "#"开头的文件的 Makefile 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2345154/

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