2009-07-02 53 views
4

我有一個(部分)的qmake項目文件是這樣的:如何強制qmake在TEMPLATE = lib時不創建符合目標的鏈接?

TEMPLATE=lib 
TARGET=whatever 
SOURCES=whatever.cpp 
HEADERS=whatever.h 

這將 - ATLEAST默認 - 創建一個圖書館和一些符號鏈接是這樣的:

libwhatever.so -> libwhatever.so.0.1.0 
libwhatever.so.0 -> libwhatever.so.0.1.0 
libwhatever.so.0.1 -> libwhatever.so.0.1.0 
libwhatever.so.0.1.0 

libwhatever.so.0.1 .0是實際的庫二進制文件,其餘的只是符號鏈接。

我想要歸檔的是,根本沒有創建任何符號鏈接或順序什麼是其他方式,以便libwhatever.so將是實際的二進制文件,其餘的是符號鏈接。

回答

5

如果使用no-op覆蓋QMAKE_LN_SHLIB變量,它將不會生成符號鏈接。

QMAKE_LN_SHLIB  = : 
0

,如果你給了我們一些提示,爲什麼它很重要它可以幫助...

至於怎麼,你可能會考慮一個腳本,將重新安排事物根據自己的喜好是在構建結束時運行處理。

+1

我想要這種行爲的原因是由於某些軟件包裝的原因。我知道如何解決這些問題,所以原因實際上是無關緊要的。真正的原因是,qmake本身太沒有記錄,我問這個問題是爲了找出這種行爲是否可以在沒有任何「黑客」的情況下重新配置。 – rasjani 2009-07-03 06:56:21

1

我研究了qmake源碼和mkspecs,但似乎符號鏈接的生成是相當硬連線的。

從我的來源發現,似乎如果你添加plugin到CONFIG,只有庫將產生,沒有符號鏈接。

雖然我不能告訴你這樣做是否有其他副作用。但它似乎是擺脫符號鏈接的唯一方法,而無需編寫構建後運行的腳本。

+0

優秀的解決方法!如你所說,它可能會在結果二進制文件中增加更多鏈接標誌。至少qt本身不允許混合實際的插件,如果它們已經用不同的arch標記集合編譯的話,它們可能仍然在os級別上工作。我需要檢查這個.. – rasjani 2009-11-30 08:05:31

2

我想建議發表swarfrat和它的作品,但它有一個(相當有用)消息輸出錯誤:

Error 1 (ignored) 

所以,這裏是刪除符號鏈接,而不會產生任何的另一種方式錯誤:

unix: QMAKE_POST_LINK = find $$DESTDIR -maxdepth 1 -type l -exec rm -f {} \; 

有關此qmake變量的更多信息可以參考here

0

您可以在下面添加到您的親文件:

CONFIG += unversioned_libname unversioned_soname 

我已經測試成功。

相關問題