需要 "ensure dependency is up to date"
need "ensure dependency is up to date"
我在 ICFP 看尼尔的 discussing shake。他在演讲中提到 need 函数确保依赖项是“最新的”。这到底是什么意思?以下是演讲中使用的代码:
"Foo.o" *> \_ -> do
need ["Foo.c"]
...
...
system' "gcc" ["-c", "Foo.c"]
这是否意味着 Shake 框架期望有一个关于如何构建“Foo.c”的“规则”,并且在确定是否需要重新构建时运行该规则运行 构建“Foo.o”的规则?如果是这样的话,Shake 本质上是否有从文件到规则的映射?当我的依赖项是一个只存在于我的系统上的文件时会发生什么?如果不使用 Shake 生成它,而我使用 need ["Somefile.txt"]
,则不会存在如何构建“Somefile.txt”的规则。 Shake 会崩溃吗?归根结底,我们必须从一些已经存在的文件开始。
P.S。我是构建系统和 Shake 的新手;任何指导表示赞赏。
如果一个依赖项的所有依赖项都是最新的,那么该依赖项就是“最新的”,并且这些依赖项的当前值已经 运行。但是这个问题的重点似乎是Shake中的Foo.o
可以指两件事:
- 可以有一个规则
"Foo.o" *>
运行 一些命令,可能取决于源文件,并生成一个输出文件 Foo.o
。
- 如果没有生成
Foo.o
的规则,那么 Shake 会假定 Foo.o
是一个源文件。在叶子必须有文件是源文件。
您可以在 Shake 产生的错误消息中看到这一点:
$ shake shakeOptions $ action $ need ["hello.txt"]
Error, file does not exist and no rule available:
hello.txt
规则是根据它们生成的文件命名的,没有规则意味着它是一个与 Make 等构建系统共享的源文件。但是,此 属性 不同于 Buck/Bazel 等构建系统,其中目标和源具有不同的命名空间。
我在 ICFP 看尼尔的 discussing shake。他在演讲中提到 need 函数确保依赖项是“最新的”。这到底是什么意思?以下是演讲中使用的代码:
"Foo.o" *> \_ -> do
need ["Foo.c"]
...
...
system' "gcc" ["-c", "Foo.c"]
这是否意味着 Shake 框架期望有一个关于如何构建“Foo.c”的“规则”,并且在确定是否需要重新构建时运行该规则运行 构建“Foo.o”的规则?如果是这样的话,Shake 本质上是否有从文件到规则的映射?当我的依赖项是一个只存在于我的系统上的文件时会发生什么?如果不使用 Shake 生成它,而我使用 need ["Somefile.txt"]
,则不会存在如何构建“Somefile.txt”的规则。 Shake 会崩溃吗?归根结底,我们必须从一些已经存在的文件开始。
P.S。我是构建系统和 Shake 的新手;任何指导表示赞赏。
如果一个依赖项的所有依赖项都是最新的,那么该依赖项就是“最新的”,并且这些依赖项的当前值已经 运行。但是这个问题的重点似乎是Shake中的Foo.o
可以指两件事:
- 可以有一个规则
"Foo.o" *>
运行 一些命令,可能取决于源文件,并生成一个输出文件Foo.o
。 - 如果没有生成
Foo.o
的规则,那么 Shake 会假定Foo.o
是一个源文件。在叶子必须有文件是源文件。
您可以在 Shake 产生的错误消息中看到这一点:
$ shake shakeOptions $ action $ need ["hello.txt"]
Error, file does not exist and no rule available:
hello.txt
规则是根据它们生成的文件命名的,没有规则意味着它是一个与 Make 等构建系统共享的源文件。但是,此 属性 不同于 Buck/Bazel 等构建系统,其中目标和源具有不同的命名空间。