Racket 中基于平台(或操作系统)的包依赖

Package dependencies based on platform (or operating system) in Racket

我有一个使用依赖于平台的系统库的包,每个系统库都被分离到它们自己的包中。有没有一种方法可以根据我安装的平台安装不同的依赖项?

最天真的解决方案是让包依赖于所有这些:

#lang info
...
(define deps '("mypackage-windows" "mypackage-osx"))

但是 mypackage-windowsmypackage-osx 即使不需要也会安装。更糟糕的是,我还需要确保 OS X 和 Windows 特定的软件包在错误的平台上安装时不会引起问题。

那么,有什么方法可以让 raco 仅根据每个平台安装我需要的软件包?

是的。您可以在 info.rkt 文件的 deps 部分使用 #:platform 符号来执行此操作。

您可以找到 documentation on it here, and an example of it in the racket-gui package.

您可以使用 'osx 'unix'windows 来确定您使用的平台。

因此您的示例如下所示:

#lang info
...
(define deps '((mypackage-windows #:platform windows)
               (mypackage-osx     #:platform osx))

事实上,如果您想要不同版本的包在 36 和 64(甚至 ppc)变体上以不同的方式工作,您也可以这样做:

#lang info
...
(define deps '((mypackage-windows-64 #:platform "win32\x86_64")
               (mypackage-windows-32 #:platform "wind32\i386")
               (mypackage-osx-64     #:platform "x86_64-macosx")
               (mypackage-osx-32     #:platform "i386-macosx")
               (mypackage-osx-ppc    #:platform "ppc-macosx")))