📑
arch|linuxのnimからwindows版をクロスコンパイル(環境を構築)
archなのでyay
windows版バイナリの作成には、mingw-w64ツールチェインが必要だが、これらはAURからインストールしなければならない。
どの道、手操作が必要なので、コマンドラインに複数並べるメリットはあまりない。
sudo がタイムアウトすることを考えれば、1つづつ入れるのがお勧めである。
下記のコマンドラインを使えば手間は最小限になる。
yay --answerdiff none --answerclean none --answeredit none mingw-w64-binutils-bin
yay --answerdiff none --answerclean none --answeredit none mingw-w64-crt-bin
yay --answerdiff none --answerclean none --answeredit none mingw-w64-gcc-bin
yay --answerdiff none --answerclean none --answeredit none mingw-w64-headers-bin
yay --answerdiff none --answerclean none --answeredit none mingw-w64-winpthreads-bin
*.nim.cfg
nimでのクロスコンパイル自体は n番煎じなので、概ねそのとおりに書けばよい。
archlinuxでは/etc/nim.cfgに十分な記述があるので、差分だけ書けば良い。
GNU-linkerのオプションが、一部 mingw-linkerでは通らないので、本家オプションの中身を空欄で上書きして潰す必要がある。
amd64.windows.gcc.path = "/usr/bin/"
amd64.windows.gcc.exe = "x86_64-w64-mingw32-gcc"
amd64.windows.gcc.linkerexe = "x86_64-w64-mingw32-gcc"
#amd64.windows.gcc.options.linker = ""
gcc.options.linker = ""
nim c --os:windows *.nim
あとは --os:windows を入れれば、出力ファイル名も *.exe にしてくれる。
windowsでの動作は試してないが :P wineで動いたので多分問題ないだろう。
例えば とあるスクリプト をos:windowsビルドするとこうなる
$ nim c --os:windows modini.nim
Hint: used config file '/etc/nim/nim.cfg' [Conf]
Hint: used config file '/etc/nim/config.nims' [Conf]
Hint: used config file '.../modini.nim.cfg' [Conf]
...
Hint: [Link]
Hint: 42996 LOC; 0.794 sec; 47.617MiB peakmem; Debug build; proj: .../modini.nim; out: .../modini.exe [SuccessX]
$ file modini.exe
modini.exe: PE32+ executable (console) x86-64, for MS Windows
$ wine ./modini.exe
Discussion