GNU Make 在没有 shell 且没有换行符的情况下写入文件
GNU Make write to file without shell and without newline
我正在尝试想出一种几乎完全用纯 make 编写 Makefile 的方法,以便能够轻松地将其移植到 Windows 而无需依赖 sh 特定扩展。希望能够在cmd.exe.
执行
我需要将 5 个由空格分隔的值写入文件,所以我会这样做:
recipe: $(TARGETS)
$(foreach target,$^,$(file >> file.txt,$(shell $(target))))
问题是每次执行$(file ...)
都会在文件中添加一个新行,无论我是否过滤掉该行,似乎都是在函数执行后完成的。
有没有什么方法可以将 $(target)
的执行结果累积到配方中的一个变量中,稍后只需使用 $(file ...)
将所有内容串联在一起输出?
我不知道你所说的 "without shell" 是什么意思,因为你在食谱中明确使用了 $(shell ...)
。无论如何,如果没有现实生活中的例子,我们可以尝试我不能确定,但是你不能颠倒 file
和 foreach
函数的顺序吗?
recipe: $(TARGETS)
$(file >>file.txt,$(foreach target,$^,$(shell $(target))))
我正在尝试想出一种几乎完全用纯 make 编写 Makefile 的方法,以便能够轻松地将其移植到 Windows 而无需依赖 sh 特定扩展。希望能够在cmd.exe.
执行我需要将 5 个由空格分隔的值写入文件,所以我会这样做:
recipe: $(TARGETS)
$(foreach target,$^,$(file >> file.txt,$(shell $(target))))
问题是每次执行$(file ...)
都会在文件中添加一个新行,无论我是否过滤掉该行,似乎都是在函数执行后完成的。
有没有什么方法可以将 $(target)
的执行结果累积到配方中的一个变量中,稍后只需使用 $(file ...)
将所有内容串联在一起输出?
我不知道你所说的 "without shell" 是什么意思,因为你在食谱中明确使用了 $(shell ...)
。无论如何,如果没有现实生活中的例子,我们可以尝试我不能确定,但是你不能颠倒 file
和 foreach
函数的顺序吗?
recipe: $(TARGETS)
$(file >>file.txt,$(foreach target,$^,$(shell $(target))))