天天看點

QT項目pro檔案檢測PATH,兼論contains使用

想在qt的項目檔案 pro 檔案中設定環境變量PATH檢測,以避免程式啟動缺少相關的dll檔案,便于項目備份遷移時候提醒。

可設定了 contains ,幾乎不起作用。

官方說明:

contains(variablename, value)

Succeeds if the variable 

variablename

 contains the value 

value

; otherwise fails. It is possible to specify a regular expression for parameter value.

You can check the return value of this function using a scope.

For example:

contains( drivers, network ) {
    # drivers contains 'network'
    message( "Configuring for network build..." )
    HEADERS += network.h
    SOURCES += network.cpp
}
           
The contents of the scope are only processed if the 

drivers

 variable contains the value 

network

. If this is the case, the appropriate files are added to the SOURCES and HEADERS variables.

這裡其實是一個坑,這個contains不是包含network,而是包含某個item,一項是network。而每個項的分隔符是空格,是以範例中的network是一個字。如果drivers中包含 network-script,則contains(drivers,network)這個表達式結果是false。而環境變量 PATH的分割符是分号“;”,是以這個contains不能直接用。

修改如下:

通過split函數分割;的每個項目,這樣處理結果傳遞給PATH變量,這樣的變量能被contains處理,也支援每個小項中包含空格。

這樣就通過了,如果PATH沒有對應的MYLIB目錄,編譯生成停止。

後記Mac OS X

本來以為Mac OS X 下需要處理 DYLD_LIBRARY_PATH 變量。結果出乎意料

感覺 QT在建構和運作時候,環境是不一樣的。

建構的時候

QT項目pro檔案檢測PATH,兼論contains使用

建構時候的環境變量

運作的環境變量

QT項目pro檔案檢測PATH,兼論contains使用

可以看到, pro 檔案運作 qmake建構的時候,DYLD_LIBRARY_PATH是沒有的。此時的檢測DYLD_LIBRARY_PATH是沒有意義的。而且好像無需另外的 .profile的bash中設定。建構時候會根據打開時候的pro檔案,在lib裡自動添加。

就是修改完畢pro檔案後,最好退出QT Creator 一次。