dune 多執行擋設定問題
Dev Tool OCaml Dune
近期使用 OCaml 在解 AoC,因為一天都會有兩題,所以我都放同個資料夾 q1.ml, q2.ml,dune 設定為
(executables
(names q1 q2)
(public_names dayXX_q1 dayXX_q2)
(libraries lib))
但有時我需要針對當天的題目做共用函數,這種方法就行不通,因為 dune 在下 executables
的情況下默認該資料夾都是執行擋,所以下 (modules common)
會錯誤,所以我將他分開來寫
(executable
(name q1)
(public_name dayXX_q1)
(modules common)
(libraries lib))
(executable
(name q2)
(public_name dayXX_q2)
(modules common)
(libraries lib))
似乎解決了問題,但是某一天我使用外部 lib(Core
) 時,VSCode 卻報錯給我,但實際上可以編譯,似乎 VSCode extension 在讀設定時只認單個 executable
,但是用 executables
又沒辦法使用同資料夾底下的 module,後來找到方法是手動排除某個檔案讓 dune 不再認定他是執行擋
https://dune.readthedocs.io/en/stable/reference/dune/library.html
<modules> uses the Ordered Set Language, where elements are module names and don’t need to start with an uppercase letter. For instance, to exclude module Foo, use (modules (:standard \ foo)).
(executables
(names q1 q2)
(public_names dayXX_q1 dayXX_q2)
(modules
(:standard \ common))
(libraries lib dayXXlib))
(library
(name dayXXlib)
(modules common))