VisualStudioではビルドできるのに、MsBuildでプロジェクトファイルを指定してビルドしようとすると失敗する。「C1083: include ファイルを開けません」
内容を見てみると、プロジェクトファイル内で$(SolutionDir)
で指定されている箇所で失敗しているようだ。
MsBuildにはプロジェクトファイルしか渡していないので$(SolutionDir)
が解決できないのか。
ググると似たような質問があった。
「MsBuildで$(SolutionDir)
柔軟に指定したい場合は/p:SolutionDir=path
を使えばいいぜ!」とのこと。
試してみた。気づいた注意点を書いておく:
- 相対パスで指定するならvcxprojファイルからの相対パス
- 元々の
$(SolutionDir)
は末尾\
付きなのでそれにならう - ディレクトリの区切り文字は
/
可 - MsBuildのオプション指定の
/p
は-p
でもよい
例えば以下のような構成:
./ # カレントディレクトリ
`- solution/ # $(SolutionDir)
|- MySolution.sln # ソリューションファイル
`- project/ # $(ProjectDir)
`- MyProject.vcxproj # プロジェクトファイル
であればこんな感じに書ける筈:
MsBuild ./solution/project/MyProject.vcxproj -p:SolutionDir=../
プロジェクトファイル中で$(SolutionDir)
を使わないようにしてもよい。
$(ProjectDir)
でがんばろう。
そもそもプロジェクトファイルなのだから$(SolutionDir)
に依存しない方が健全に思える。