繁体   English   中英

ocamlbuild:“ all”不做任何事情

[英]ocamlbuild: Nothing to be done for `all'

我在makefile使用ocamlbuild构建代码,并希望在发生代码更改时重新编译。 make错误消息的回报: make: Nothing to be done for `all'.

我的makefile代码:

all: test1 test2

test1:
    ocamlbuild $(INCLUDES) $(FLAGS) $(TEST1_BYTE)
    mv $(TEST1_BYTE) test1.out

test2:
    ocamlbuild $(INCLUDES) $(FLAGS) $(TEST2_BYTE)
    mv $(TEST2_BYTE) test2.out

clean:
    rm -f test1.out test2.out
    rm -rf _build

我希望make可以重新编译而不是make clean; make make clean; make 它只能与make clean; make make clean; make了。

将您的目标设为伪造,然后make实用程序将始终重建它们。 ocamlbuild将使用OCaml基础结构的所有知识来跟踪依赖关系,并且永远不会重建任何不必要的东西。 这是声明目标伪音的方法,将其添加到Makefile中

   .PHONY: test1 test2

同样,您似乎仍在学习make和ocamlbuild实用程序,并且鉴于您将花费时间在学习工具上,因此最好将精力集中在非传统的东西上。 虽然习惯于制作可以被认为是有用的,但ocamlbuild工具或多或少不推荐使用较新的, 沙丘的并且记录得更好。 这很简单,只需创建一个名为dune的新文件,并将以下内容放在其中,

(executable 
   (name test1))

(executable 
   (name test2))

现在,您可以使用dune build test1.exe构建目标。 对于那些不知道如何调用dune人,您仍然可以礼貌地创建Makefile。 和往常一样,不要忘记在makefile中使目标成为伪造。

这个Makefile特别指出test1test2依赖任何内容。 只要它们都存在,make就会说无事可做。

我对ocamlbuild ,但我怀疑您应该单独使用它,而不是将其与make结合使用,make是一个单独的(非常灵活,但是非常旧的)构建系统。

就其价值而言,在我看来,许多当前的OCaml开发人员都在为构建系统转换为沙丘。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM