4

Makefile構成タイプを使用するようにMicrosoftVisualStudioを構成し、Microsoftツールを使用してプロジェクトをビルドするためのmakefileを作成しました。プロジェクト構成のNMakeセクションで、ビルドコマンドラインをbuild.batに設定しました。これは、次のように、コマンドライン引数としてmakefileを使用してnmakeを呼び出すだけのファイルです。

nmake /nologo /f makefile.x86.winnt.msvc2010

これは問題なく機能します。

クリーニングのために、すべてのビルドアーティファクトを削除するターゲットをmakefileに書き込みました。次のようになります。

#... the rest of the makefile
clean:
    @erase /f /q $(OBJS) $(OUT) $(MAPFILE) $(PDBFILE)
    @echo + clean

そこで、cleanコマンドラインを、引数としてcleanを使用したnmake呼び出しに設定しました。このような:

nmake /nologo /f makefile.x86.winnt.msvc2010 clean

このテキストをclean.batに配置し、「Clean Command Line」として設定しましたが、呼び出し元のシェルがnmakeを見つけることができないため、機能しません。クリーン呼び出し時にパスを確認しましたが、MSVSのパスにクリーン用のビルドツール(nmakeを含む)が含まれていません。(上記のnmakeコマンドの実行は、PATHにnmakeが含まれているシェルから成功することに注意してください)。

クリーンなコマンドラインでnmakeを呼び出すことができるように、MSVSにビルドツールをPATHに含めるにはどうすればよいですか?または、より良い解決策はありますか?

4

3 に答える 3

4

Visual Studio ExpressのReadmeからの引用:

2.既知の問題

2.4。製品の問題

2.4.1。一般的な問題(製品)

2.4.1.14。クリーンソリューションは構成タイプでは機能しません:Makefile(2010 RC)

nmakeソリューションで「CleanSolution」を実行すると、次のエラーが報告されます。

1>------ Clean started: Project: makefiletest, Configuration: Debug Win32 ------
1>  'nmake' is not recognized as an internal or external command,
1>  operable program or batch file.
1>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.MakeFile.Targets(33,5):
  error MSB3073: The command "nmake /?" exited with code 9009.
================= Clean: 0 succeeded, 1 failed, 0 skipped ==========

この問題を解決するには:

  1. VisualStudioのコマンドプロンプトウィンドウを開きます。
  2. と入力してDevenvを開きますdevenv /useenv
  3. これで、「クリーンソリューション」が機能するはずです。

または:

バッチファイルをcleanコマンドに渡します。バッチファイルで、nmakeツールおよび他のビルド環境へのPATHを設定します。

于 2012-11-06T03:34:54.953 に答える
3

もちろん、あなたは正しいです、MSVCはそのビルドツールをパスに入れることは決してありません!したがって、ここには2つのオプションがあります。

  • VisualStudioコマンドプロンプト内からバッチファイルを実行します

  • バッチファイルの先頭に追加%ProgramFiles%\Microsoft Visual Studio 10.0\VC\vcvarsall.batして、必要なパスをPATHに追加します。

于 2012-10-22T23:44:00.270 に答える
0

set PATH=$(VSInstallDir)\BC\bin;%PATH%より良い解決策は、バッチファイルの先頭に追加することだと思います。

これにより、将来VS2012(またはそれ以降)にアップグレードする場合に、ビルドを将来にわたって利用できるようになります。

于 2013-01-24T18:41:41.070 に答える