1. 程式人生 > >Qt中Makefile檔案裡INCPATH和LIBS引數詳解

Qt中Makefile檔案裡INCPATH和LIBS引數詳解

1 LIBS中的-l 和 -L引數   -l 引數是用來指定程式要連線的庫, -l引數緊接著就是庫名, 庫名和真正的庫檔名的差別, 以數學庫為例, 其庫名為 m , 其 庫檔名為 libm.so,也就是把庫名標頭檔案的lib 和 .so 去掉就是庫名。  放在/lib, /usr/lib 和 /usr/local/lib 中的庫直接使用引數 -l 連結就可以了, 如果沒有放在這三個檔案中, 那麼 我們就要使用-L 加上庫檔案所在的資料夾, 然後再使用 -l 加上庫名就好了。 

另外,大部分libxxxx.so只是一個連結,以RH9為例,比如 libm.so它連結到/lib/libm.so.x,/lib/libm.so.6又連結到/lib/libm-2.3.2.so,如果沒有這樣的鏈 接,還是會出錯,因為ld只會找libxxxx.so,所以如果你要用到xxxx庫,而只有libxxxx.so.x或者libxxxx- x.x.x.so,做一個連結就可以了ln -s libxxxx-x.x.x.so libxxxx.so

手工來寫連結引數總是很麻煩的,還好很多庫開發包提供了生成連結引數的程式,名字一般叫xxxx-config,一般放在/usr/bin目錄下,比如gtk1.2的連結引數生成程式是gtk-config,執行

gtk-config --libs

就能得到以下輸出

"-L/usr/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm"

這就是編譯一個gtk1.2程式所需的gtk連結引數,xxx-config除了 --libs引數外還有一個引數是--cflags用來生成標頭檔案包含目錄的,也就是-I引數,在下面我們將會講到。你可以試試執行gtk-config --libs --cflags,看看輸出結果。現在的問題就是怎樣用這些輸出結果了,最笨的方法就是複製貼上或者照抄,聰明的辦法是在編譯命令列里加入這個`xxxx -config --libs --cflags`,比如編譯一個gtk程式:gcc gtktest.c `gtk-config --libs --cflags`這樣就差不多了。注意`不是單引號,而是1鍵左邊那個鍵。

除了xxx-config以外,現在新的開發包一般都用pkg-config來生 成連結引數,使用方法跟xxx-config類似,但xxx-config是針對特定的開發包,但pkg-config包含很多開發包的連結引數的生成, 用pkg-config --list-all命令可以列出所支援的所有開發包,pkg-config的用法就是pkg-config pagName --libs --cflags,其中pagName是包名,是pkg-config--list-all裡列出名單中的一個,比如gtk1.2的名字就是gtk+, pkg-config gtk+ --libs --cflags的作用跟gtk-config --libs --cflags是一樣的。比如:gcc gtktest.c `pkg-config gtk+ --libs --cflags`。

這段是抄的別人的,  先寫在這裡吧。 

2 INCPATH中的-I 引數 

-I引數是用來指定標頭檔案目錄,/usr/include目錄一般是不用指定的,gcc知道去那裡找,但 是如果標頭檔案不在/usr/include裡我們就要用-I引數指定了,比如標頭檔案放在/myinclude目錄裡,那編譯命令列就要加上- I/myinclude引數了,如果不加你會得到一個"xxxx.h: No such file or directory"的錯誤。-I引數可以用相對路徑,比如標頭檔案在當前目錄,可以用-I.來指定。上面我們提到的--cflags引數就是用來生成-I 引數的。

相關推薦

QtMakefile檔案INCPATHLIBS引數

1 LIBS中的-l 和 -L引數   -l 引數是用來指定程式要連線的庫, -l引數緊接著就是庫名, 庫名和真正的庫檔名的差別, 以數學庫為例, 其庫名為 m , 其 庫檔名為 libm.so,也就

Qt開啟檔案對話方塊儲存檔案對話方塊

主要是用QFileDialog的兩個靜態方法 1、開啟對話方塊 QString getOpenFileName(QWidget * parent = 0, const QString & caption = QString(), const QStr

java的arraycopy(),copyOf()copyOfRange()方法

java語言提供了很多的方法來對陣列進行復制。其中我們常用的方法有三種,下面一一列舉出來 1. arraycopy()方法 函式原型:arraycopy(Object src, int srcPos, Object dest, int destPos, int length) src: 原陣列

Android關於FTP檔案上傳下載功能

Android關於FTP檔案上傳和下載功能詳解  更新時間:2017年09月21日 11:41:14   作者:一諾的祕密花園    我要評論 這篇文章主要為大家詳細介紹了Android關於FTP檔案上傳和下載功能,具有一定的參考價值,感興趣

Python的break、continuepass的

break 當在while或者for中使用break的時候break會跳出整個迴圈,也就是else裡面的語句也不會執行,將跳出整個迴圈 print('---------------break-------------') for x in 'huhailong': if

[Struts2] 配置檔案struts.xmlweb.xml

 配置檔案struts.xml和web.xml。 其實要使Struts2可以工作,配置很簡單,套模板就好了。而且基本與版本無關。 如,只要struts2需要的基本jar包已經引入,那麼直接配置一下web.xml和struts.xml檔案。 web.xml中包含: <

touch事件的touches、targetToucheschangedTouches(

touches: 當前螢幕上所有觸控點的列表; targetTouches: 當前物件上所有觸控點的列表; changedTouches: 涉及當前(引發)事件的觸控點的列表 通過一個例子來區分

關於AngularJs$http post、get 傳送接受引數

1、POST、GET攜帶引數的寫法不一樣,如下: ? 1 2 3 4 5 6 7 $http({method: 'post', url: './feedback/ma

Android Drawable資源selector、layer-listshape標籤

在實際開發中,我們經常會對控制元件的樣式進行一些修改已滿足我們的要求,這時候就會引用 Drawable 資源的樣式檔案。 1、StateListDrawable 資源         StateListDrawable 用於組織多個 Drawable 物件。當使用 Stat

Java的Enumeration、IterableIterator介面

前言 在看各類Java書籍或者博文的時候,總是會遇到Enumeration、Iterable和Iterator這三個介面,如果對這幾個介面不是很明白的話,總會讓自己看著看著就迷惑了,正好這週末,抽空把這三個介面總結一下,一掃之前的各種迷惑。 Enumeration Enumeration(列舉)介面的作用和I

mencoderffmpeg引數2 (轉)

有很多軟體能夠擷取影片影象、合併影象,但如果影片太多,比如視訊網站為使用者上傳的影象生成預覽圖之類的,人工在gui方式下操作就不可取了,我們需要在命令列方式下來擷取、合併。 首先,擷取影片影象使用最多的就是mplayer或者ffmpeg,我用mplayer比較熟,本文就以此為例了,ffmpe

U_boot 的 bootcmd bootargs引數

U-boot的環境變數值得注意的有兩個: bootcmd 和bootargs。 bootcmd     前面有說過bootcmd是自動啟動時預設執行的一些命令,因此你可以在當前環境中定義各種不同配置,不同環境的引數設定,然後設定bootcmd為你經常使用的那種引數。

MultiByteToWideCharWideCharToMultiByte引數及使用方法

轉自:https://www.cnblogs.com/ziwuge/archive/2011/11/05/2236968.html https://www.cnblogs.com/gakusei/articles/1585211.html 簡單整理,未驗證,不對結果負責 函式原型: in

tomcat的server.xml引數

記錄下tomcat裡的server.xml引數含義 <Environment name="simpleValue" type="java.lang.Integer" value="30"/> <Resourc

Linux核心調整核心引數

SYN COOKIE原理和Linux核心中的實現 http://www.ibm.com/developerworks/cn/linux/l-syncookie/?ca=dwcn-newsletter-linux Linux系統下的DDOS攻擊防範 http://hi.baidu.com/mo

xmlHttp的readyState status引數

AJAX中有檢查狀態碼的, xmlHttp.onreadystatechange=handleStateChange;   function handleStateChange()  {   if(xmlHttp.readyState==4)  

PostgreSQL資料庫配置檔案之postgresql.conf全部引數

1 概述 所有的引數的名稱都是不區分大小寫的。每個引數的取值是布林型、整型、浮點型和字串型這四種類型中的一個,分別用boolean、integer、floating point和string表示。布林型的值可以寫成ON、OFF、 TRUE、 FALSE、 YES、 NO、

Tomcat處理請求過程重要引數

Tomcat處理使用者連線請求模式 BIO:阻塞模型 NIO:非阻塞模型 APR:高效能,可擴充套件的模式,Tomcat8版本預設模式 在使用tomcat時,經常會遇到連線數、執行緒數之類的配置問題,要真正理解這些概念,必須先了解Tomcat的聯結器(Connector)。在

qt獲取檔案路徑檔名、字尾名

QString file_full, file_name, file_path,file_suffix ; QFileInfo fileinfo; file_full = QFileDialog::getOpenFileName(this,.....); fileinfo =

IC驗證Makefile檔案

#!/bin/sh RTL_PATH=-f ../../rtl/rtl.fl TB_PATH=../../verif VERB=UVM_DEBUG SEED=$(shell date +%s) TEST= N=0 OUT_DIR=./logs TEST_ID +=${TEST}_${N} VPD=