Github actionsで msvc の link が使えなくなる話
github actions でビルドしているときにはまった問題
cl でコンパイルして、最後に link でリンクして exe ファイルを作るんですけど、github actions で実行すると、こんなふうになりました。
link: extra operand keiko.obj
最初は、link の引数に互換性がないのかと思ったんですが、色々調べると、どうやら unix 計にある link っぽいものをたたいていそうでした。
環境変数をダンプして調べると、github actions に入っている git bash に、link を Windows 用にコンパイルした link.exe が含まれていて、それが優先して実行されていることが分かりました。
環境変数を手っ取り早く持ってくるために、 ilammy/msvc-dev-cmd を使ってるのですが、これで環境変数を prepend(先頭に挿入)した直後でも、workflow step の開始時にさらに上書きされてしまうらしいです。
上記の action の readme を見ると、これが起こるのは shell: bash の設定のときだけと書いてあるのですが、普通に cmd だろうが powershell だろうが起きています。
ということで、ちょっとお行儀が悪いですが、仮想環境なのでまあいいでしょうということで、消し去って差し上げました。コンパイルする前のステップに以下を追加です。
- name: Die, link!!!!!
run: rm /usr/bin/link.exe
shell: bash
shell: bash を指定するのがポイントです。じゃないと、 /usr/bin が通らないです。べつに他のステップは bash 指定じゃなくてよいです。