2010-02-24 105 views
11

我有一個qmake構建了一些庫和一個依賴於它們的應用程序。使用subdirs模板,我可以讓qmake輸出一個.sln文件,它幾乎符合我在VC2008中的喜好。儘管我已經在前面描述過的每種方式中指定了目標之間的依賴關係,但是我最終沒有在.sln文件中使用「項目依賴關係」,而且我必須手動添加這些依賴項。如何讓qmake在Visual Studio .sln項目中生成「項目依賴項」

到目前爲止,我已經試過

CONFIG += ordered 

以正確的順序無濟於事。

而且同樣更神祕的語法:

client.depends = core common 

這也不起作用。當我加載sln時,沒有任何依賴出現。

回答

1

我不是makefile中的wiz,但是如果我是你,我會嘗試通過編輯.pro文件,運行qmake然後在MAKLEFILE中查看自動生成的結果來重新創建與QtCreator的依賴關係。如果你想知道qmake是如何工作的,那麼看看qt文檔。

+0

我一直在每一套文檔我能找到的。並做了大量的潛水源引導。作爲一個方面說明,生成文件qmake生成似乎具有正確的依賴關係。這是有問題的.sln。 –

+0

@Michael:你的意思是個別的.vcproj文件(因爲我相信那些依賴關係存在)。 –

+0

我會猜想這個東西居住在.sln文件中,因爲這是知道所有不同項目的文件,並且可以將它們與我需要的依賴關聯起來。 –

2

從舊的郵件列表條目: http://lists.trolltech.com/qt-interest/2006-07/thread00238-0.html

看來,它試圖弄清楚哪些事情取決於你。您是否可以從sln構建而無需手動輸入項目依賴關係?

+0

我遇到過那個神祕的帖子。不確定信息是否最新。我當然嘗試過使用它描述的簡單和複雜的方法,但無濟於事。 沒有手動輸入依賴關係,我不能說構建真的有效,不。它沒有完全破碎,但是有足夠的問題,無論是公開的還是沉默的,總是值得手動添加代幣。 –

+0

您是否嘗試過使用QtCreator設置依賴項,然後創建sln?我沒有我的Qt開發機器,所以當你在項目視圖中指定依賴關係時,我無法確定它將什麼放到pro文件中。 –

8

qmake的MSVC後端(解決方案生成器)不支持CONFIG += orderedtarget.depends =。早在2010年使用Qt 4.7左右,該文檔並沒有提到這一點,但在4.8的Qt開發人員已經更新了文檔accordingly(見目標部分言論):

  • .depends該子項目取決於指定子項目。僅在使用生成文件的平臺上可用。
  • 訂購選項不適用於Visual Studio。

但他們提供了一種解決方法(在cryptic post中討論過),它仍然有效,甚至在同一個target部分有記錄。太糟糕了,我不得不重建QMAKE和使用調試器來驗證:

  1. 一)有它的目標(.LIB使用LIB/DLL項目,而不是.dll文件)使用在解決方案中的另一個項目的鏈接行上(您可以使用LIBS修改鏈接行)。

    b)有一個Exe項目,其中TARGET用於解決方案中另一個項目的自定義構建步驟。

  2. 您不使用TARGET變量中的路徑(對此使用DESTDIR/DLLDESTDIR),例如TARGET = $(SOME_VARIABLE)/ myLib將不起作用。
  3. 如果你有一個特定的位置爲你的庫,你指定-Lmy /庫/路徑和LIBS + = mylib,而不是隻使用LIBS + =我的/庫/路徑/ mylib
  4. 葉項目創建在生成解決方案文件之前。 (您可以用遞歸的標誌QMAKE要做到這一點,像 「QMAKE -tp VC -r [yourproject.pro]」

基本上,QMAKE會產生依賴,當你的lib的目標名稱(yourlib.lib)是等於最終應用的導入庫(即具有LIBS += yourlib.lib)之一。 (見qmake's source其中導入庫添加爲依賴關係和​​,他們正在與項目目標名稱相比)

這裏是解決方案中生成依賴關係的最小設置:

solution.pro 
    TEMPLATE = vcsubdirs 
    SUBDIRS = main app 

app/app.pro 
    LIBS += main.lib 

main/main.pro 
    TARGET = main 
    TEMPLATE = vclib 

有了這些,如果你運行qmake -r -tp vc,你會得到在生成的.sln明確的相關性:

GlobalSection(ProjectDependencies) = postSolution 
    {E634D0EB-B004-3246-AADA-E383A376158F}.0 = {1BD6E999-63E6-36F5-99EE-1A650332198C} 
EndGlobalSection 
+0

非常感謝!最後我知道爲什麼heck依賴不起作用。 – Trass3r

相關問題