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 ...)。无论如何,如果没有现实生活中的例子,我们可以尝试我不能确定,但​​是你不能颠倒 fileforeach 函数的顺序吗?

recipe: $(TARGETS)
        $(file >>file.txt,$(foreach target,$^,$(shell $(target))))