繁体   English   中英

ocamlbuild 生成一个空白存档文件而不是可执行文件

[英]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.

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