qt工程中有lib、dll、a、so等檔案需要匯入時,有時需要指定路徑。指定絕對路徑換到其他機器編譯時會不大方便。那麼,如何在qt pro檔案中通過相對路徑導入庫呢。
動態庫新增方式與靜態庫新增方式是不同的。
實際使用過程中需要加以區別。
libs += -l ./ \
-l ./libpath/ \
-l$$pwd/libpath/path/ \
-l mylib \
-l mylib2
libs+= "d:/program files/mylib3.a"
libs+= "$$pwd/path/to/lib/mylib4.a"
libs+= "./path/to/lib/mylib5.a"
以上語法在qt5.9中全部可行。
在qt5.2中,第3行方式($$pwd)編譯會報錯,說是無權訪問資料夾。
libs += mylib.a \
./path/mylib2.a
libs+= "d:/program files/mylib3.a"
libs+= "$$pwd/path/to/lib/mylib4.a"
libs+= "./path/to/lib/mylib5.a"
看出來了吧,靜態庫新增時不要加-l字首。或者直接用雙引號以檔案的方式載入。靜態庫必須寫全路徑。所有-l新增的路徑都只針對動態庫有效。
上面的**表示將當前路徑、./libpath、./libpath/path/ 目錄加入庫檔案搜尋目錄中,並向工程新增mylib、mylib2、mylib3、mylib4、mylib5 這幾個庫檔案。
路徑中有空格時,用雙引號括起來。加上庫的字尾使用全名。不要先導符號-l或者-l。
-l表示後面跟的是乙個資料夾,工程會將這個目錄加入庫檔案搜尋路徑中。如果是在qt中f5來debug執行,確保庫檔案在debug目錄下對應的目錄中。-l表示後面跟的是乙個庫檔案的名字。不論字尾是.lib、.dll、.so、.a,都不需要加上字尾名,直接用庫的點分號前面部分名字即可。
「」 用於含空格的路徑,由於可能含空格,所以引號的模式不能加任何-l或者-l字首,只能是庫檔案全部路徑,也即一定要帶上字尾。為啥呢?個人感覺是避免make檔案意外注入。。。意外被空格分隔成多條命令。。。。引號內可以使用變數,$$pwd之類的,也可以用「.」號。
如果已經編譯過,直接從exe開啟檔案進行執行,只要庫檔案在exe相同目錄下即可。
在庫檔案名字前面不要加任何路徑。因為不加路徑,工程會自動從所有包含路徑中去查詢,而如果包含了路徑,那就會從指定路徑下去尋找(萬一在某個包含的路徑中有庫檔案但自己手欠寫成另外乙個不包含庫檔案的目錄)。顯然不加路徑限定更加靈活。
注意$$pwd與.的區別。$$pwd直接取出了**所在目錄,所以是固定的。當使用.號時,makefile檔案中解析後還是乙個.號,所以構建時代表與makefile同一目錄。本人測試環境:
Qt中pro檔案如何從相對路徑導入庫
qt工程中有lib dll a so等檔案需要匯入時,有時需要指定路徑。指定絕對路徑換到其他機器編譯時會不大方便。那麼,如何在qt pro檔案中通過相對路徑導入庫呢。動態庫新增方式與靜態庫新增方式是不同的。實際使用過程中需要加以區別。動態庫新增 libs l l libpath l pwd libp...
關於QT中 pro檔案中的相對路徑
被.pro檔案中的相對路徑給整糊塗了,仔細研究後,原來.pro檔案中有兩種相對路徑。一種情況下.表示.pro檔案所在的目錄 另一種情況下.表示構建生成目錄 includepath source form headers 這些變數中使用的.指的是.pro檔案所在的目錄 而destdir objects...
關於QT中 pro檔案中的相對路徑
被.pro檔案中的相對路徑給整糊塗了,仔細研究後,原來.pro檔案中有兩種相對路徑。一種情況下.表示.pro檔案所在的目錄 另一種情況下.表示構建生成目錄 includepath source form headers 這些變數中使用的.指的是.pro檔案所在的目錄 而destdir objects...