writeLines()不生成有效的makefile

时间:2015-10-10 11:19:00

标签: r makefile gnu-make

我试图使用R自动生成一个makefile,并遇到了一个非常奇怪的问题。

使用以下代码生成makefile:

v <- "histogram.tsv: histogram.r\r\tRscript histogram.r"
fileConn <- file("Makefile")
writeLines(v,  fileConn)
close(fileConn)

这会生成以下Makefile

histogram.tsv: histogram.r
    Rscript histogram.r

这个Makefile没有构建,但是当我在&#34; Rscript&#34;之前手动输入Tab时它呢!当我将write.lines生成的文本与手工生成的文本进行比较时,identical()会返回TRUE

1 个答案:

答案 0 :(得分:3)

我在Linux Mint上测试时工作正常。当涉及通常在Windows中使用的回车字符时,您的发行版可能不会宽容。您可以尝试删除回车字符或使用 dos2unix

  

在DOS / Windows文本文件中,换行符也称为换行符          两个字符的组合:回车符(CR)后跟a          换行(LF)。在Unix文本文件中,换行符是单个字符:          换行(LF)。在Mac文本文件中,在Mac OS X之前,换行符          是单一回车(CR)字符。如今Mac OS使用Unix          风格(LF)换行。

sudo apt-get install dos2unix
dos2unix Makefile

在您的情况下,您还需要插入换行符,因此请按以下方式设置v

v <- "histogram.tsv: histogram.r\n\tRscript histogram.r"

您可以尝试编写makefile的方法,以避免出现此类问题:

target: dependencies; \
command1; \
command2