1

インクルード ディレクトリの名前が環境変数に由来する Visual C++ 2008 のプロジェクトがあります。

AdditionalIncludeDirectories=""..\include";"$(EXTRA_INCLUDE_DIR)""

(プロジェクト プロパティ → 構成プロパティ → C/C++ → 一般 → GUI の追加インクルード ディレクトリ)

EXTRA_INCLUDE_DIR環境変数が定義されていない場合、プロジェクトはコンパイルされず、奇妙なエラーが発生します: .

1>Compiling...
1>WIN32
1>c1 : fatal error C1083: Cannot open source file: 'WIN32': No such file or directory
1>foo.c

WIN32シンボルが定義されていないことを示すその他のエラー。( )WIN32で定義されます。PreprocessorDefinitionsPreprocessorDefinitions="WIN32;MORE_STUFF"

ファイルを見ると、BuildLog.htm何が起こっているのか理解していると思います。

Creating temporary file "c:\foo\build\RSP00001273601360.rsp" with contents
[
/GL /I "..\include" /I "" /D "WIN32" /D "MORE_STUFF" …
"..\src\foo.c"
]
Creating command line "cl.exe @"c:\foo\build\RSP00001273601360.rsp" /nologo /errorReport:prompt"

空の引数が続いているように見え/Iますが、これはどういうわけか消えて (Windows コマンド ライン解析の奇抜さ? または Visual C++ の?)、/D引数に/IなりWIN32、オペランドになります (コンパイラがソース ファイルとして解釈します)。名前)。(私の解釈が間違っていると思われる場合は、お気軽にコメントしてください。)

プロジェクトは、定義されている場合EXTRA_INCLUDE_DIRと定義されていない場合の両方で機能する必要があります。これは、わずかに異なる状況で自動ビルドと手動ビルドの両方に使用されるためです。

環境変数で指定された追加のインクルード ディレクトリを持ち、この環境変数が定義されていないときにビルドを中断しないようにするにはどうすればよいですか?

4

1 に答える 1

2

愚かな回避策:

AdditionalIncludeDirectories=""..\include";"$(EXTRA_INCLUDE_DIR)\.""

そのため、変数が存在する場合、正しいディレクトリが検索されます。変数がない場合\.(つまり、現在のドライブのルート ディレクトリ) が検索されます。.h開発者が寄生ファイルをルート ディレクトリに保存しないことを願っています。

于 2012-12-14T12:58:36.260 に答える