私はかなり大きなC++コードベースを扱っています。コードベースは通常、カスタムビルドスクリプトとmakefileを使用してLinuxでコンパイルすることを目的としています。私はコードをVisualStudioに移植しています。これは、Visual Studioを使用している人なら誰でも同意するように、手動で行うのは面倒です。
私自身の見た目は役に立たなかったので、コードベースを分析してソリューションファイルと付随するファイルを生成するためにQtで独自のユーティリティを書き始めました.vcxproj
。このクラスを使用してQUuid
各プロジェクトのGUIDを生成しQTextStream
、ファイルの書き込みに使用してい.sln
ます。
ここで問題が発生します。生成された.sln
ファイルを開くと、次のエラーが表示されます。
現在、VisualStudioIDE内で既に手動で作成したソリューションを生成しようとしています。生成したファイルをVisualStudioで作成したファイルと比較.sln
しましたが、プロジェクトの表示順序が異なり、GUIDが(明らかに)一致していないことを除けば、違いを見つけることができません。ここに私の問題の簡単な例を含めます。
Visual Studioはこれを生成しました:
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mylib", "mylib\mylib.vcxproj", "{35BAFEEE-35FA-4313-AF67-AF8AB7458451}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{35BAFEEE-35FA-4313-AF67-AF8AB7458451}.Debug|Win32.ActiveCfg = Debug|Win32
{35BAFEEE-35FA-4313-AF67-AF8AB7458451}.Debug|Win32.Build.0 = Debug|Win32
{35BAFEEE-35FA-4313-AF67-AF8AB7458451}.Release|Win32.ActiveCfg = Release|Win32
{35BAFEEE-35FA-4313-AF67-AF8AB7458451}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
そして私はこれを生成しました:
Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mylib", "mylib\mylib.vcxproj", "{A09FDB84-49CD-4C14-9D7D-D813D2D905EF}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
Release|Win32 = Release|Win32
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A09FDB84-49CD-4C14-9D7D-D813D2D905EF}.Debug|Win32.ActiveCfg = Debug|Win32
{A09FDB84-49CD-4C14-9D7D-D813D2D905EF}.Debug|Win32.Build.0 = Debug|Win32
{A09FDB84-49CD-4C14-9D7D-D813D2D905EF}.Release|Win32.ActiveCfg = Release|Win32
{A09FDB84-49CD-4C14-9D7D-D813D2D905EF}.Release|Win32.Build.0 = Release|Win32
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal
これが私の質問です:
- これらの特定のエラーメッセージはどういう意味ですか?
- ファイルの何が問題になっているのかについて、より具体的な情報を入手する方法はあり
.sln
ますか? - 生成しているGUIDに何か問題がありますか?Visual Studioツールを使用してGUIDを作成する必要がありますか?
- 私が見逃しているファイルにメタデータやその他の目に見えない特別なソースがありますか?
問題はテキストエンコーディングではないと確信しています。メモ帳を使用してのUTF-8バージョンを作成し、.sln
代わりにそれを開いてみました。
すべてを考慮すると、GUIDが問題を引き起こしているようですが、方法や理由はわかりません。
アップデート
これらのファイル間で私が気付いた唯一の大きな違いは、ファイルサイズでした。2つのファイルは正確に3バイト異なりますが、テキストエディタを使用してファイルに何も表示されませんでした。しかし、ジョエル・スポルスキーの記事に思いを馳せました。プレーンテキストのようなものはありません。結局のところ、すべてが1と0の単なる表現にすぎません。
2つのファイルを16進エディターで開いたところ、Microsoftが生成したファイルの先頭に3バイトが見つかりました。(0xEF, 0xBB, 0xBF
)。これらの3バイトは、別のマシンで横になっていたVisualStudio2008ソリューションにも表示されます。ソリューションを書き始める前に、これらのバイトをファイルに挿入するコードを書くこともできますが、それでも疑問が残ります。
これらのバイトは一体何のためにあるのでしょうか。また、Microsoftがそれらを使用しているのはなぜですか。