菜鸟专属Makefile?Mac OS X

8

我遇到了困难,无法理解我之前在stackoverflow上提出的一个问题的答案,该问题位于:

更高效的R / Sweave / TeXShop工作流程?

特别是来自用户las3rjock的答案建议创建“makefile”并运行makefile以自动编译.Rnw文件(使用R(Sweave)和LaTeX)。 我不知道什么是makefile,也不知道如何在Mac OS X的终端中使用它。 我的互联网搜索返回了超出我的知识水平的内容。 我想我需要一些指导来创建和运行makefile。

是否有人可以给出“虚拟”说明,如何创建一个makefile来运行Sweave / LaTeX,或更准确地说,利用上一个问题中las3rjock的答案?谢谢!

5个回答

11

我写了一篇带链接的文章,介绍了使用makefiles进行Sweave

以下是文章中的内容:

我还发布了四个样本Sweave文档。每个文档都有完整的源代码可在github上获取。每个文档都使用了makefile。在前两个教程中,描述了makefile的详细信息:


7
一个makefile是一个纯文本文件,它通过一系列的操作指定如何在给定一组依赖关系时制作“目标”。目标是冒号后面的左侧内容,其余行上的依赖项。后续的缩进行是应该完成目标的操作。
例如,在您的LaTeX案例中,.pdf文件是您的最终目标,它依赖于您的.tex文件。因此,有一个运行pdflatex的操作。.tex本身是从.Rnw文件创建的,因此还有另一个规则,通过运行Sweave从foo.Rnw创建foo.tex。
make的美妙之处在于它检查依赖项的时间戳。它最初是用于编译大型C程序,将其分成许多文件的情况。在编译最终程序时,重新编译您未更改的所有.C是没有意义的,因此您的Makefile只会编译已更改的.C文件,并将所有.o文件链接到可执行文件中。
make已经超越了原始方案,到达了新的自动化构建解决方案的程度,因此您可能会看到cmake、ant、maven和其他一些东西的提及。我不知道其中一半是什么。

4

我刚刚阅读了之前的问题和这个问题,但是我写了一个适用于Mac OS X的小shell脚本。我不确定这是否完全符合您的要求,但也许您可以从中学到一些东西:

#!/bin/sh
R CMD Sweave yourfile.Rnw
for file in `ls pdfs`;
do pdfcrop "$file" pdfs/"$file"
done
pdflatex yourfile.tex
open yourfile.pdf

如果您不知道:您可以通过chmod +x yourscriptfile.sh命令使此脚本可执行,然后通过./yourscript运行该脚本。第一行启动了您的Sweave创建.tex文件的过程。for循环是可选的:它用于将.pdf图形裁剪到子文件夹中。我发现这比在R的绘图中处理边距要容易得多——特别是如果我想在您的.pdf报告中优化位置。

在工作流方面,我做以下操作:1.存储所有打印到R对象中的内容(如函数结果和图形)。2.在Sweave中只使用一个小行,用于源代码的整个分析。这样我的Sweave文档几乎不包含任何非LaTeX代码,并且始终方便。每当我编辑文本时,我只需要编辑sweave文件(或者如果我不需要刷新计算甚至只需要.tex文件)

希望有所帮助


3
创建一个名为Makefile的文件,该文件存储您的文档并打开它。
将他输入的代码复制/粘贴到您的Makefile中(记得用要生成的文件名替换myfile)。
在您的文档目录中打开控制台并键入make pdf

0

我来到这里是为了寻找一个简单的Makefile示例。所以这里有一个:

# Makefile

showme:
        ls

重要提示:这一行中的空格 ls实际上是按一次Tab键。由于奇怪的原因独特的制作, 它不能是空格。如果您使用空格,将会出现以下错误:"Makefile:4: *** missing separator. Stop."。

在文件夹中创建一个名为Makefile的文件,并将上述代码片段复制到其中。在终端中输入make showme以运行它。您应该会看到目录内容被打印到终端上。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接