簡體   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