VS2008まで、ソリューションファイルでnative C++プロジェクトの依存関係を設定しました(Project Dependencies ...
)およびif(デフォルト)リンカーオプション
Properties -> Linker -> General : Link Library Dependencies = Yes
設定されている場合、Visual Studioビルドは.lib
このプロジェクトが依存するすべてのプロジェクト(DLL、LIB)のファイルは、「静的に」リンクされます。
Side注:Microsoftは依存関係を変更しましたVS2010で働いていて、プロジェクトに直接依存関係を追加することになっています
Common Properties -> Framework and References : (List of depenencies)
(each lib/dll has a separate option:
Project Reference Properties -> Link Library Dependencies : True|False
私はそれで大丈夫です。 これはnotこの質問の意味です。
(ここで1つの説明: 柔軟なプロジェクト間参照 。)
ソリューションレベルでプロジェクトの依存関係を定義することはstill可能であり、General
リンカーオプションもstillそこ。ただし、機能しません。見る:
Microsoftは、Linker Optionが他の世界の人々が期待することをしていないことを確認し、次の説明を追加します。
このフィードバックをご報告いただきありがとうございます。発生している問題は仕様によるものです。 「リンクライブラリの依存関係」は、ライブラリをリンカーへの入力として渡すかどうかだけを指示するフラグです。依存関係は自動的には検出されません。顧客として、提案どおり手動で依存関係を定義する必要があります。
誰でもその意味を説明できますか、またはそれ以上の点まで:「Link Library Dependency」リンカーオプションが実際に行うことVisual Studio 2010で?
実際にリンクされていないはずの「リンカーへの入力」とは何ですか?
2017再実行。わーい。
このオプションはデフォルト値を設定します(a) 各プロジェクト参照の実際のLink Library Dependecies
各プロジェクト参照にLinkLibraryDependecies
が設定されている場合、実際には意味がありません。
ただし、新しい参照を追加する場合、デフォルトで(VS2010および2015で)vcxproj
ファイルの新しい<ProjectReference>
要素はnotに設定されているため、このオプションは値が変更されない限り、新しく追加されたすべての参照のデフォルトを提供するという点で関連します。
(a):It reallyは、すべての構成(デバッグ/リリース)とプラットフォーム(Win32/x64)で同じでなければなりません。
ハンスが指摘した それが出現 VS2010で何もしないとして。ただし、これは実際にVS/MSBuildで使用されていないという意味ではありません。
重要なのは、このオプションをvcxprj
ファイルに挿入する方法と、msbuildファイルの<ProjectReference>
設定に対するデフォルトの動作です。
上記の「リンカー」ダイアログの設定は次のように挿入されます。
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
...
<ItemDefinitionGroup>
<ClCompile>
...
</ClCompile>
<Link>
...
</Link>
<ProjectReference>
<LinkLibraryDependencies>This option is not used by VS 2010!</LinkLibraryDependencies>
</ProjectReference>
...
</ItemDefinitionGroup>
</Project>
表示何らかの形でLink
オプションと一緒にグループ化されている間、それはあなたを混乱させるだけです。
これが実際に行うこと与えられたvcxproj
ファイルで(または.props
fileから来るとき)、のデフォルト値を設定するLink Library Dependencies
ValueVS2010のFrameworks and References
セクションに対する各プロジェクトの依存関係VC設定ダイアログ-
-またはVS2015 Referencesのサブツリー内-
新しいプロジェクト参照を追加すると、vcxproj
ファイルのデフォルトエントリは次のようになります。
...
<ItemGroup>
<ProjectReference Include="..\W32DynLib1\W32DynLib1.vcxproj">
<Project>{96be134d-acb5-....-....-....bb6fe4a7}</Project>
</ProjectReference>
</ItemGroup>
ここで<LinkLibraryDependecies>true|false</..>
サブ要素が欠落していることに気付くでしょう。これは、「グローバル」設定が実際にデフォルト値の設定に使用されることを意味します。
グローバル設定がfalse
(またはNo
)の場合、プロジェクト参照は何もリンクしません。 true
の場合、リンクします。
そのうえ:
LinkLibraryDependency
が設定から完全に欠落している場合、デフォルトはtrue(からMicrosoft.Cpp[.Common].props
file(MSBuildフォルダー内)。This is not used
が含まれている場合、これはtrueと解釈されます。False is the new truth!
、またはNo way
を持っている場合、ビルドによってtrueと解釈されるになります。false
を除くすべての値に対して、これはその後解釈されますが- trueプロジェクトをビルドするとき。さらに何が:
それseems古いソリューションをvcproj
ファイルで変換する場合、コンバーターはsln
とvcproj
プロジェクトの値で指定された古い依存関係を使用します。リンカオプション、および各LinkLibraryDependency
に実際にProjectReference
を設定します。これは新しいvcxproj
に挿入します。 VS2005に遡る変換履歴。
設定を適切な値にして、明確にする必要があります。
ここでは、プロジェクトのプロパティ->共通のプロパティ->フレームワークと参照に移動し、プロジェクトに新しい参照を追加する必要があります。その後、VSの初期バージョンとは異なり、VS 2010でのみ動作します
これはProperties / Common / Frameworks and References
で設定する必要があります
または、以下のようなものをvcxprojファイルに追加できます。もちろん、参照している実際のプロジェクトとそのプロジェクトのuuidを使用します。
<ItemGroup>
<ProjectReference Include="..\Cpp\Cpp.vcxproj">
<Project>{c58574bf-9dd8-4cf8-b5b6-6551f2f3eece}</Project>
</ProjectReference>
</ItemGroup>
あなたも設定する必要があるようです
<IgnoreImportLibrary>false</IgnoreImportLibrary>
rEFERENCEDプロジェクトで。