make編譯
① make會把所有的代碼都重新編譯嗎
make程序實際上是對makefile文件進行解析和執行。
需要編譯的文件,引用的頭文件,庫等都需要在makefile文件中進行標識。
make程序會根據makefile的內容進行編譯。
所以make並不一定編譯所有的代碼。需要查看makefile文件中定義了哪些文件需要進行編譯。
② make 重新編譯
make clean先
③ make是linux的自帶的還是需要安裝編譯器才有make功能
make程序不是Linux系統自帶的,也不是編譯器帶的,不要按照IDE的概念去理解(Windows下面的IDE一安裝什麼工具都有了),make工具是需要另外安裝的。
比如說我的Linux系統上,當時搭建開發環境時是這樣安裝的:(我的系統是Fedora,所以用的yum)
yum install make gcc gcc-c++
看,編譯器和make是分開安裝的哈。
make工具是需要makefile的時候才用,而makefile是多個源文件的時候才有,如果你編譯一個helloworld程序,直接用gcc或g++編譯就可以了,從這點來看,也沒理由把make和編譯器捆綁在一起。
④ linux下編譯程序源碼,執行make命令時報錯如圖,有沒有什麼頭緒或者建議,謝謝大神了
linux下所有軟體源碼包的安裝方式一般都會在readme中有詳細的官方說明,對於gerbv如下圖所示
上述大部分內容對linux下所有軟體包的安裝都適用。
⑤ 這句linux下的make編譯怎麼用啊(sudo make那是什麼意思)
makefile? 在當前目錄寫個makefile文件然後執行命令make就行了
⑥ 如何運行make
最近試了一下php7,在編譯和支持Mysql上都遇到一些問題,相信不少同學也同樣遇到,所以在這里聊一下這個過程。簡單來講編譯PHP7隻需要3步: 1、./buildconf --force 2、./configure 3、make && make install 1、3步,都沒啥好管的,configure是編譯的關鍵,涉及到PHP對一些庫的支持,這里我們使用最小的支持,包括MySQL: curl gd fpm mysqlnd 之所以把curl和gd拿來說,目的是要搞清楚,這些三方庫在編譯PHP之前得安裝好,可以直接使用yum安裝在默認位置,也可以編譯安裝到指定位置,yum安裝後,編譯時不用指定庫的安裝位置,關於安裝這些庫,可以搜索一下有很多。下面看看基本的configure ./configure --prefix=/apps/php/php7.0 --enable-mbstring --with-curl --with-gd --with-config-file-path=/apps/php/php7.0/etc/ -- enable-fpm --enable-mysqlnd --with-pdo-mysql=mysqlnd PHP-FPM 關於fpm,相信不用多說,用它來支持PHP是一個比較好的選擇,PHP5.3.3開始就已經內置了php-fpm,所以PHP7里當然也有,只需要--enable-fpm一下就可以了 php-fpm參數: --start 啟動 --stop 強制終止 --quit 平滑終止 --restart 重啟 --reload 重新平滑載入php的php.ini --logrotate 重新啟用log文件 MySQL支持 重點講一下這個,因為在它上面花了一點時間,不知道從哪一版本開始,PHP不在希望使用mysql的庫來支持mysql的連接,啟用了mysqlnd來支持,聽說比libmysql要快很多,PHP5.x還可以使用libmysql,PHP7貌似已經取消了支持,編譯都沒有了--with-mysql參數,只支持--with-mysqli和--with-pdo-mysql,可以通過查看configure的參數來知道: ? 1 ./configure -help grep mysql 可以看到,PHP希望使用mysqlnd來支持MySQL,所以參數可以這樣寫: --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd mysqlnd是不需要mysql支持的,所以不用先安裝好mysql一樣可以編譯通過,啟動php-fpm,查看一下phpinfo,能看到mysqlnd和pdo_mysql表示php已經可以支持mysql了(這里用的是pdo,mysqli同理) 幾個問題 編譯問題:cc: Internal error: Killed (program cc1) 這個問題是第一次遇到,原來是我的阿里雲伺服器關掉了swap,內存不夠用,就報了這個錯。 解決辦法很簡單,configure時加上--disable-fileinfo參數就可以了。 PHP報找不到mysql服務 正如它所說,確實沒找到,看看phpinfo中pdo_mysql.default_socket項 mysql.sock在哪裡,再看一下mysql.sock的真正位置,使用命令:ps -efgrep mysql查看: 明顯不在一個位置上,我的正確位置是:/var/lib/mysql/mysql.sock 所以,修改一下php.ini,找到pdo_mysql.default_socket,改為你的實際位置,重啟一下php-fpm,很不幸,雖然php.ini有這個配置,修改後,竟然不行,最好是編譯的時候,指定mysql.socket的位置: ? 1 --with-mysql-sock=/var/lib/mysql/mysql.sock 如果還不行,可以到/tmp目錄下建立一個mysql.sock的軟鏈接: ? 1 ln -s /var/lib/mysql/mysql.sock mysql.sock 再重啟一次php-fpm,相信已經正常運行了。如果需要PHP支持的庫更多,可以再次編譯,在configure時把需要的支持加上,就是--with-xxx這中,記得如果是三方的,要先安裝這些庫才行哦。
⑦ linux下的make是什麼,它是不是調用另外的編譯器
在 Unix 上寫程式的人大概都碰過 Makefile,尤其是用 C 來開發程序的人。用 make來開發和編譯程式的確很方便,可是要寫出一個 Makefile就不簡單了。偏偏介紹 Makefile 的文件不多,GNU Make 那份印出來要幾百頁的文件,光看完 Overview 就快陣亡了,難怪許多
人聞 Unix 色變。
本文將介紹如何利用 GNU Autoconf 及 Automake 這兩套軟體來協助我們『自動』產生 Makefile 檔,並且讓開發出來的軟體可以像 Apache, MySQL 和常見的 GNU 軟體一樣,只要會 ``./configure'', ``make'', ``make install'' 就可以把程式安裝到系統中。如果您有
心開發 Open Source 的軟體,或只是想在 Unix 系統下寫寫程式。希望這份介紹文件能幫助您輕松地進入 Unix Programming 的殿堂。
1. 簡介
Makefile 基本上就是『目標』(target), 『關連』(dependencies) 和『動作』三者所組成的一連串規則。而 make 就會根據 Makefile 的規則來決定如何編譯 (compile) 和連結 (link) 程式。實際上,make 可做的不只是編譯和連結程式,例如 FreeBSD 的 port collect
ion 中, Makefile 還可以做到自動下載原始程式套件,解壓縮 (extract) ,修補 (patch),設定,然後編譯,安裝至系統中。
Makefile 基本構造雖然簡單,但是妥善運用這些規則就也可以變出許多不同的花招。卻也因此,許多剛開始學習寫 Makefile 時會感到沒有規范可循,每個人寫出來的 Makefile 長得都不太一樣,不知道從何下手,而且常常會受限於自己的開發環境,只要環境變數不同或路
徑改一下,可能Makefile 就得跟著修改。雖然有 GNU Makefile Conventions (GNU Makefile 慣例) 訂出一些使用 GNU 程式設計時撰寫 Makefile 的一些標准和規范,但是內容很長而且很復雜, 並且經常做些調整,為了減輕程式設計師維護 Makefile 的負擔,因此有了Automake。
程式設計師只需寫一些預先定義好的巨集 (macro),交給 Automake 處理後會產生一個可供Autoconf 使用的 Makefile.in 檔。再配合利用Autoconf 產生的自動設定檔 configure即可產生一份符合 GNU Makefile慣例的 Makeifle 了。
詳細內容看這里
⑧ 系統編譯:如何給Make命令來傳遞參數
但有時候我們還是需要讓make命令帶入些參數給makefile腳本 比如你在代碼裡面需要定義個宏DEBUG來打開調試開關代碼如下:{i=9;#def DEBUGi=1;#i=0;#endprf("i=%d\n", i);0;} 般來說這個宏定義可以通過直接修改源代碼進行但這樣顯然不是很好辦法 另外個辦法是通過makefile修改比如: CFLAGS=-g -Wall -DDEBUG object=myprog all:$objectmyprog:a.c gcc ${CFLAGS} a.c -o ${object} 如果更進步連makefile都不想修改我們可以通過向make命令傳遞參數來進行為此我們需要適當修改makefile如下: CFLAGS=CFLAG CFLAGS-g -Wall -DDEBUG object=myprog all:$objectmyprog:a.c gcc ${CFLAGS} a.c -o ${object} 此時如果想打開DEBUG宏我們可以這樣輸入make命令: [ychq@ICM3-2 net]$ make CFLAG=-DDEBUG gcc -g -Wall -DDEBUG a.c a.c: In function `': a.c:9: warning: implicit declaration of function `prf' [ychq@ICM3-2 net]$ 我們可以發現DEBUG宏已經被正確傳入 更進步我們可以通過傳遞區別參數給make讓make編譯區別模塊
⑨ Makefile.XX文件如何用make來編譯
1. 通過-f選項指定make的文件。
make -f Makefile.xx
2. (同樓上)把Makefile.xx文件修改為Makefile或makefile
⑩ linux用make語句編譯
$ cat makefile
.SUFFEXES:.c .o
.c.o:
gcc -Wall -c $<
OBJS=my_file.o
all: my_exec_file
my_exec_file:$(OBJS)
gcc -Wall $(OBJS) -o $@
$ make
gcc -Wall -c my_file.c
gcc -Wall my_file.o -o my_exec_file
簡單說明:
.SUFFEXES:.c .o :告訴make識別哪些源程序和目標程序
.c.o: :告訴make命令.c程序如何生成.o文件,採用其下的gcc -Wall -c $<($<代表任意一個編譯時用到的.c文件)命令。
all: my_exec_file :告訴make命令自動生成哪個可執行程序
my_exec_file:$(OBJS) :告訴make命令如何生成my_exec_file文件,需要哪些目標代碼($(OBJS)),採用其下的命令: gcc -Wall $(OBJS) -o $@ ($@代表my_exec_file,即要編譯的可執行文件名)