1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Circle CIでnmakeビルドを動かす方法

Posted at

Circle CIではdotnet.exeやMSBuildでのビルド例はあるようなのですが、nmakeでのビルドは、探してもなかなか見つかりませんでした。

msbuildとは異なり、nmakeは、そのままの状態だとコマンドにパスが通っていないため、呼び出せません。手動ビルドの時は、vcvarsall.batなどで開発者コマンドプロンプトに入ってからビルドしてましたが、Circle CIでそれをやると、バッチ実行以降の処理が、実行ログに全く記載されなくなります。call等で呼び出すと、次の行では環境変数が元に戻ってしまいます。GitHub Actionでは、vcvarsall.batで設定される全部の環境変数を引き継ぐmsvc-dev-cmdというものがあるので、それを呼び出すだけなのですけどね。

対処

powershell.exe (windows executorのデフォルト)で実行し、開発者用PowerShellの起動ショートカットの中身を直接実行するような感じで実装しました。

      - run:
          name: compile
          command: | 
            $vswhere = "C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe"
            $instanceId = & $vswhere -property instanceId -format value
            $installationPath = & $vswhere -property installationPath -format value
            Import-Module (Join-Path $installationPath "Common7\Tools\Microsoft.VisualStudio.DevShell.dll")
            Enter-VsDevShell $instanceId -SkipAutomaticLocation -Arch amd64
            nmake /F NMakefile

※ 32ビットの場合は-Arch x86です。

vcvarsall.batの環境変数を全部取り出して引き継ぐ方法よりも、こちらのほうが短く書けて、すっきりしました。

参考:

おまけ

今回、3つのプロジェクトで、Circle CIのワークフローを書きました。Circle CIの存在を知ってからわずか数日で、それぞれの更新をリリースできるまでになりました。ご参考までに。

  • lslint: LSLの構文チェックバイナリ。Win/OSX/Linuxのそれぞれのビルド処理あり。
  • sublime-text-lsl: SublimeTextのLSL(SecondLifeのスクリプト言語)のプラグインです。
  • sublime-text-tooltip-lsl: こちらもSublimeTextのプラグインです。ちょっと短め。

※ リンクは、config.ymlへの直リンです。

全て、kwdbという、LSLの定数や関数の一覧を提供しているリポジトリから、データをダウンロードしてきています。lslintでは、ダウンロードしたデータを、makeでソースに変換して、リポジトリにコミットしています。下2つは、kwdb_to_sublimeという、変換処理だけを入れてあるリポジトリをクローンして、それを使って定義ファイル類に変換し、コミットしています。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?