2010-05-20 85 views
3

我有兩個Qt4 Gui應用程序項目和一個共享庫項目,所有引用在帶有「subdirs」模板的.pro文件中。因此,它是這樣的:在Qt項目中引用庫最簡單的方法是什麼?

  • exampleapp.pro
    • app1.pro
    • app2.pro
    • sharedlib.pro

現在,我想做的事是從app1和app2引用sharedlib,以便每次運行app1.exe時,我都不必手動將sharedlib.dll從它自己的文件夾複製到應用程序1.exe的文件夾。

我可以在項目窗口中設置PATH環境變量,但這不是很便攜。我已經看過把LIBS變量放在app1.pro文件中,但我不確定這是否僅僅涉及靜態鏈接庫 - 我用各種語法嘗試過它,它似乎不適用於共享庫。

回答

5

你可以組織你的項目如下:

  • PROJECT1
    • LIB
    • APP1
      • app2.pro
    • APP2
      • app2.pro
    • sharedlib
      • sharedlib.pro

在sharedlib.pro可以添加這樣的事情:

TEMPLATE = lib 
TARGET = sharedlibr 
QT + = core \ 
     gui 
DESTDIR = ../lib 

DESTDIR:保證編譯的結果將被複制到的位置 「../lib目錄」

爲應用APP1和App2:

TEMPLATE = app 
TARGET = app1 
QT + = core \ 
     gui 
DESTDIR = ../bin 

這僅用於開發時,創建安裝程序,庫和可執行文件被放置在適當的目錄中,具體取決於操作系統。

+1

此解決方案效果很好,謝謝。不過,我實際上只是把所有東西都放進垃圾箱。對不起,接受你的答案的延遲。 – 2010-05-22 07:22:19

0

要添加到此(有點晚!),可以使用QMAKE_POST_LINK在構建完成後複製文件。示例:

defineReplace(formatpath) { 
    path = $$1 

    win32 { 
     return(\"$$replace(path, "/", "\\")\") 
    } else:unix { 
     return($$replace(path, " ", "\\ ")) 
    } else { 
     error("Unknown platform in formatpath!") 
    } 
} 

win32:COPY_CMD = copy 
unix:COPY_CMD = cp -P 
macx:COPY_CMD = cp -R 

win32:CMD_SEP = $$escape_expand(\n\t) 
unix:CMD_SEP = ";" 

win32:LIB_EXT = dll 
unix:LIB_EXT = so* 
macx:LIB_EXT = dylib 

# Put here the directory of your library's build dir, relative to the current directory 
# A path is given for example... 
MYLIB_BUILD_DIR = $$_PRO_FILE_PWD_/../lib/bin 

QMAKE_POST_LINK += $$COPY_CMD $$formatpath($$MYLIB_BUILD_DIR/*.$$LIB_EXT) $$formatpath($$OUT_PWD/$$DESTDIR) $$CMD_SEP 
相關問題