簡體   English   中英

Visual C ++-庫的客戶端沒有意識到庫已使用實用注釋庫進行了更改

[英]Visual C++ - the client of a library is unaware that the library has changed using pragma comment lib

我正在使用的代碼庫使用雜注注釋庫將代碼的依賴關系表達為其所需的庫。 它的構建非常糟糕。 我做了一個實驗,試圖了解編譯注釋lib的用法。 它是我可以生成的最簡單的庫和該庫的客戶端。

Foo.lib
foo.cpp 
void foo() { printf("hello\n"); }
foo.h : 

#pragma comment(lib, "foo.lib")
void foo();

FooTest.exe
main.cpp : 

#include "foo.h"
void main()
{
    foo();
}

我正在使用Visual Studio 2005(為了與僅接受使用此版本制作的插件的大型商業程序兼容)。 問題是更新foo.lib時,FooTest.exe無法重新編譯。 我對foo.cpp進行了更改,然后保存,構建。 然后構建fooTest.exe解決方案。 fooTest.exe解決方案似乎無法理解其依賴性已更改。

我可以通過將鏈接程序依賴項添加到FooTest.exe來解決此問題,但這使編譯指示注釋lib失去了意義。

我已經閱讀了許多有關實用注解lib的帖子,並認為它對很多人都有效。 在我的整體代碼庫和測試中,它不起作用。 我肯定錯過了什么。

斯科特

comment lib pragma插入鏈接程序指令。 鏈接器會看到此情況,並將該庫添加到其輸入列表中。 這就是全部。 您想要的是項目依賴項,您似乎知道如何配置。

Visual Studio 2005注釋注釋文檔

這是MSBuild(VS2010 +版本后的構建引擎)和VCBuild(VS2005中的引擎)的已知局限性 ,實際上是每個合理的構建引擎的局限性:

依賴性分析僅接收項目文件作為輸入-vcproj,vcxproj,make文件或其他文件。 如果將依賴項注入源文件 (使用#pragma lib),則將其完全對構建系統不可見,從而繞過其依賴項分析並在依賴項更改時阻止所需的構建。

優良作法是使用pragma-comment-lib表示僅對非常穩定的組件的依賴關系。 如果您偶爾需要響應組件中的更改,pragma lib並不是適合您的工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM