致命的なエラー C1083:インクルード ファイルを開けません:「Windows.h」:そしてスコン
-
03-07-2019 - |
質問
今日は正式に C++ を使う初日です :P
オープンソースを手に入れたいので、Visual C++ 2005 Express Edition と Windows Server 2003 SP1 用の Microsoft Platform SDK をダウンロードしました。 円相プロジェクト.
そこで、scons をインストールした後、コンソールに移動し、scons を使用してコンパイルしようとしましたが、次のエラーが発生しました。
C:\oreyes\apps\enso\enso-read-only\src\platform\win32\Include\WinSdk.h(64) : fatal error C1083: Cannot open include file: 'Windows.h': No such file or directory
scons: *** [src\platform\win32\InputManager\AsyncEventProcessorRegistry.obj] Error 2
scons: building terminated because of errors.
これらのリンクを確認した後:
次のようにインストールを構成することができました。
そしてこのスクリプトを実行しても
そして、IDE で以下のファイルをコンパイルすることができました。
// Test.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
return 0;
}
しかし、それでもコンソールで例外が発生します。スコン経験のある人はいますか?
編集
実は (これを言い忘れていましたが)、「Visual Studio 2005 コマンド プロンプト」というリンクを使用してコマンド プロンプトを起動しました。
これには環境変数のパスが含まれると思います。印刷した後、そうではないことがわかりました。
echo %INCLUDE%
echo %LIB%
echo %PATH%
そしてそれらは存在しなかったので、次の .bat ファイルを作成しました。
set PATH=%PATH%;"C:\Program Files\Microsoft Platform SDK\Bin"
set INCLUDE=%INCLUDE%;"C:\ Program Files\Microsoft Platform SDK\Include"
set LIB=%LIB%;"C:\ Program Files\Microsoft Platform SDK\Lib"
それでも、sconsはvarsを受け入れないようです...:(
解決
上記の推奨事項を使用しても、scon では機能しません。scons はユーザー環境 (PATH およびその他の変数) をインポートしません。根本的な問題は、 scons が最新バージョンの SDK/VS を処理しないことです。
私は scons に時折寄稿しており、この機能 ATM の開発に取り組んでいます。うまくいけば、すぐに scons に含まれることになりますが、この機能を確実に実装するのは私が最初に予想していたよりもはるかに困難です。その理由の 1 つは、すべての SDK とコンパイラーの組み合わせが異なるためです (MS ですら、一部の .bat ファイルが正しく理解できない場合もあります)。壊れている)ので、日付を指定することはできません。1.2 (約 1 か月後にリリース予定) に含まれることを願っています。
他のヒント
インクルード ファイル パス (および場合によってはその他) を設定する必要があります。コマンド ラインでは、これは通常、Visual Studio がインストールするバッチ ファイルを使用して行われます。 vsvars32.bat
(または vcvars32.bat
VC6 との互換性のため)。
私は scon に詳しくないので、そのツール用にこれらの設定を構成する最良の方法がわかりませんが、標準のメイクファイルの場合、通常、メイクファイル内にインクルード ディレクトリ パスでマクロ変数を設定する行があり、そのマクロはコンパイラを呼び出すコマンドのコマンド ライン パラメータの一部として使用されます。
別の可能性としては、scons プロセスで vsvars32.bat を呼び出すか、バッチ ファイルで構成されたコマンド ラインから scons スクリプトを実行することが考えられます。
つまり、vsvars32.bat が設定するものを何らかの方法で scons 設定に取り込む必要があります。
環境変数を設定する、これに似たバッチ ファイル (MSVC 2005 用) があります。
c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat
ステップ1:Express インストール フォルダーで同様のファイルを見つけます。
ステップ2:これらのターゲットの詳細と 適切に変更されたパス:
cmd.exe /K "c:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat"
ステップ 3: このショートカットから DOS プロンプトを開きます
これで、コマンド ライン ビルドがこのコンソール ウィンドウ内から機能するようになります。
Visual Studio 内でコンパイルを行うために Visual Studio をどのように構成したかは示されましたが、どのようなコマンド ライン環境を試したかは示されていませんでした。申し訳ありませんが、Express バージョンを試したことがないので、Pro 以降のように追加の [スタート] メニュー ショートカットが作成されるかどうかはわかりません。環境変数がすでに設定されている適切なコマンド プロンプトを開くと、コマンド ラインでコンパイルできます。それ以外の場合は、コマンド プロンプトを開くたびに、自分で変数を設定するか、バッチ スクリプトを実行して変数を設定する必要があります。
scons がこれを自動的に実行してくれると便利です。今のところ、私はこれを使用しています(SDKコマンドプロンプトから実行します。vsvars32.batの後に実行すると違いがあるかどうかはわかりません)。
import os
env = Environment(ENV={'PATH': os.environ['PATH']})
env['ENV']['TMP'] = os.environ['TMP']
env.AppendUnique(CPPPATH=os.environ['INCLUDE'].split(';'))
env.AppendUnique(LIBPATH=os.environ['LIB'].split(';'))
これは、コマンドラインプロンプトを使用して Visual C++ 2005 Express で wxwidgets をコンパイルするときに機能します。
REM Fix Error error C1083 'windows.h'
(コンパイル時に /useenv オプションを使用します。)
set PDSKWIN=C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2
(右側のものに変更してください。)
set INCLUDE=%PDSKWIN%\Include;%INCLUDE%
set LIB=%PDSKWIN%\Lib;%LIB%
次に、コンパイル時にこの行を使用します。追加するだけだと思います /useenv
あなたの行に合わせると、すべてがうまく機能するはずです。
vcbuild /useenv /nohtmllog /nologo name.proj (or any file to compile)