gpt4 book ai didi

makefile - 将makefile(> 131000个字符)变量的内容写入文件?

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

如何在不调用shell命令的情况下将makefile变量的内容写入文件?
问题在于,变量的内容可能比 shell 程序允许的命令长(即,大于MAX_ARG_STRLEN(131072)个字符)。

特别是在makefile中,我有一个变量,其中包含一长串要处理的文件名(包括用于源代码外构建的绝对路径)。现在,我需要将这些文件名写入(临时)文件,然后可以将其传递给另一个命令。

到目前为止,我们有一个类似的规则($COLLATED_FILES是包含路径的变量):

$(outdir)/collated-files.tely: $(COLLATED_FILES)
$(LYS_TO_TELY) --name=$(outdir)/collated-files.tely --title="$(TITLE)" \
--author="$(AUTHOR)" $^

如果 COLLATED_FILES的长度超过大约130000个字符,这会中断,我们会收到错误消息:
make[2]: execvp: /bin/sh: Argument list too long

作为解决方案,我们现在尝试将变量的内容写入文件,并在 $(LYS_TO_TELY)命令中使用该文件。不幸的是,我还没有找到一种无需调用shell就能做到这一点的方法。
我的尝试包括:
$(outdir)/collated-files.list: $(COLLATED_FILES)
echo "" > $@
$(foreach f,$^,echo $f >> $@;)

但这还会在shell中立即调用所有 echo命令,因此shell命令就一样长。

有什么方法可以将 $(COLLATED_FILES)的内容写入磁盘上的文件,而无需在命令行上将它们传递给Shell命令吗?

我还搜索了是否可以将变量的内容通过管道传递给 shell ,但是我也找不到那个方向的任何东西...

最佳答案

假设您正在使用GNU Make,这里有file函数!

https://www.gnu.org/software/make/manual/html_node/File-Function.html

$(file op filename,text)

其中 op>>>

这需要GNU Make 4.0+

关于makefile - 将makefile(> 131000个字符)变量的内容写入文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7247667/

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