2017-10-17 91 views
2

對於我的Qt項目,我使用標準版本的qmake進行正常的調試和發佈版本配置,但是我還需要使用不同的靜態版本的qmake來構建我的項目的靜態版本(Windows 64位版本)。我目前正在使用命令行和分離.pro文件進行靜態生成,但是我寧願使用與非靜態版本相同的.pro文件來執行此操作,如果可能的話,也可以使用Qt創建器。如何爲靜態Qt項目指定不同的庫?

我已經爲qmake的靜態版本創建了一個工具包,現在我的問題是我無法讓qmake將我的項目與正確的庫鏈接起來(我有用於調試,發佈和靜態構建的獨立庫版本)。我的親文件看起來像這樣:

CONFIG(debug, debug|release|static) { 
    #debug build 
    LIBS += ../third-party-library/debug/library.lib 
} 

CONFIG(release, debug|release|static) { 
    CONFIG(static, debug|release|static) { 
     #static release build 
     LIBS += ../third-party-library/static/library.lib 
    } else { 
     #non-static release build 
     LIBS += ../third-party-library/release/library.lib 
    } 
} 

在爲發佈版本的項目設置,我打電話QMAKE這樣的:

qmake.exe MyProject.pro -spec win32-msvc "CONFIG+=static" 

我的問題是如何添加額外的構建配置之外通常的調試/發佈版本,以及如何爲它指定特定的庫?

+0

在QtCreator中,轉到Projects-> Build Settings-> Edit build configuration->添加 – scopchanov

回答

1

我認爲你的qmake定義是有點。 CONFIG(debug, debug|release)語法是一個特殊的結構,因爲它們都是被定義的,並且這會發現女巫的構建被實際使用。對於靜態,那不是這樣的,所以乾脆把它定義爲:

CONFIG(debug, debug|release) { 
    #debug build 
    LIBS += ../third-party-library/debug/library.lib 
} else:CONFIG(release, debug|release) { 
    static { 
     #static release build 
     LIBS += ../third-party-library/static/library.lib 
    } else { 
     #non-static release build 
     LIBS += ../third-party-library/release/library.lib 
    } 
} 

爲什麼這不符合debugrelease工作,因此需要特殊的結構,在這裏閱讀:https://doc.qt.io/qt-5/qmake-test-function-reference.html#config-config

使用static像這隻適用於qmake從CONFIG變量中讀取這樣的條件。它基本上是contains(CONFIG, static)的簡稱。

+0

嘿,這工作。我最終使用了更詳細的'contains(CONFIG,static)'語法。謝謝。 – Carlton

相關問題