[英]ocamlbuild produces a blank archive file rather than an executable
在基于 Debian 的 Linux 发行版(PopOS)上工作,我有一个文件文件夹和一个 Makefile 包含
MODULES=move score main draw setup
OBJECTS=$(MODULES:=.cmo)
TEST=test.byte
OCAMLBUILD=ocamlbuild -use-ocamlfind
MAIN=main.byte
# Recipes
default: build #first build (dependies) then run utop (command)
utop
build:
$(OCAMLBUILD) $(OBJECTS)
test:
$(OCAMLBUILD) -tag 'debug' $(TEST) && ./$(TEST)
play:
$(OCAMLBUILD) $(MAIN) && ./$(MAIN)
clean:
ocamlbuild -clean
当我调用make build
时,它似乎工作得很好,但是生成的.byte
文件没有运行。 在终端中,它们以红色显示,这表明计算机将它们理解为存档文件而不是可执行文件。 当我尝试运行./main.byte
时,它说即使该文件已在目录中列出,也无法找到该文件。
此外,当我在 Mac 上构建它时,它工作得很好。 它构建程序并正确运行它。
关于这可能是什么的任何想法?
我不完全确定为什么这适用于 Mac 而不是我的 Linux 机器,但我确实设法使用它来获得解决方案。 如果我将 Makefile 更改为
MODULES=move score main draw setup
OBJECTS=$(MODULES:=.cmo)
TEST=test.byte
OCAMLBUILD=ocamlbuild -use-ocamlfind
MAIN=main.byte
default: build
utop
build:
$(OCAMLBUILD) $(OBJECTS) $(MAIN)
test:
$(OCAMLBUILD) -tag 'debug' $(TEST) && ./$(TEST)
play:
$(OCAMLBUILD) $(MAIN) && ./$(MAIN)
clean:
ocamlbuild -clean
然后计算机识别可执行文件。
在您原来的 Makefile 中, make build
不会运行应该创建字节码可执行文件的命令ocamlbuild $(MAIN)
。 您必须运行make play
才能构建字节码可执行文件。 在修改后的 Makefile 中,您在build
Makefile 目标中将$(MAIN)
包含在传递给 ocamlbuild 的目标列表中,因此现在它由make build
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.