想在qt的項目檔案 pro 檔案中設定環境變量PATH檢測,以避免程式啟動缺少相關的dll檔案,便于項目備份遷移時候提醒。
可設定了 contains ,幾乎不起作用。
官方說明:
contains(variablename, value)
Succeeds if the variablecontains the value
variablename
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:
The contents of the scope are only processed if thecontains( drivers, network ) { # drivers contains 'network' message( "Configuring for network build..." ) HEADERS += network.h SOURCES += network.cpp }
variable contains the value
drivers
. If this is the case, the appropriate files are added to the SOURCES and HEADERS variables.
network
這裡其實是一個坑,這個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在建構和運作時候,環境是不一樣的。
建構的時候
建構時候的環境變量
運作的環境變量
可以看到, pro 檔案運作 qmake建構的時候,DYLD_LIBRARY_PATH是沒有的。此時的檢測DYLD_LIBRARY_PATH是沒有意義的。而且好像無需另外的 .profile的bash中設定。建構時候會根據打開時候的pro檔案,在lib裡自動添加。
就是修改完畢pro檔案後,最好退出QT Creator 一次。