導航:首頁 > 源碼編譯 > linuxmakefile編譯教程

linuxmakefile編譯教程

發布時間:2023-02-11 16:28:32

❶ 在linux系統中編程序,makefile是怎麼生成的,是通過GCC或GDB編譯聯接生成的嗎

這位朋友我看是有點誤解了makefile的做用。makefile 是一個腳本,由他來控制編譯出的程序的版本。當你改寫了原文件後,通過makefile 來檢查依賴關系,來生成最終的文件。比如一個程序叫a 他的源碼叫a.c

a.c 又用到頭文件a.h ,a.h是1.h和2.h生成的

如果你改寫了1.h,通過編寫makefile文件。make時會調用makefile來依此按依賴關系生成最後的a

所以說編譯時程序並不知道生成a都用到什麼。怎麼可能自己生成呢。

makefile是要你自己編寫的,來告訴make來如何編譯。make工具就相當於一個腳本。

❷ Linux平台Makefile文件的編寫基礎篇

目的:
基本掌握了 make 的用法,能在Linux系統上編程。
環境:
Linux系統,或者有一台Linux伺服器,通過終端連接。一句話:有Linux編譯環境。
准備:
准備三個文件:file1.c, file2.c, file2.h
file1.c:
#include
#include "file2.h"
int main()
{
printf("print file1$$$$$$$$$$$$ ");
File2Print();
return 0;
}

file2.h:

#ifndef FILE2_H_
#define FILE2_H_

#ifdef __cplusplus

extern "C" {

#endif

void File2Print();

#ifdef __cplusplus

}

#endif

#endif


file2.c:
#include "file2.h"
void File2Print()
{
printf("Print file2********************** ");
}

基礎:
先來個例子:
有這么個Makefile文件。(文件和Makefile在同一目錄)
=== makefile 開始 ===
helloworld:file1.o file2.o
gcc file1.o file2.o -o helloworld

file1.o:file1.c file2.h
gcc -c file1.c -o file1.o

file2.o:file2.c file2.h

gcc -c file2.c -o file2.o


clean:

rm -rf *.o helloworld

=== makefile 結束 ===

一個 makefile 主要含有一系列的規則,如下:
A: B
(tab)
(tab)

每個命令行前都必須有tab符號。


上面的makefile文件目的就是要編譯一個helloworld的可執行文件。讓我們一句一句來解釋:

helloworld : file1.o file2.o: helloworld依賴file1.o file2.o兩個目標文件。

gcc File1.o File2.o -o helloworld: 編譯出helloworld可執行文件。-o表示你指定 的目標文件名。


file1.o : file1.c: file1.o依賴file1.c文件。

gcc -c file1.c -o file1.o: 編譯出file1.o文件。-c表示gcc 只把給它的文件編譯成目標文件, 用源碼文件的文件名命名但把其後綴由「.c」或「.cc」變成「.o」。在這句中,可以省略-o file1.o,編譯器默認生成file1.o文件,這就是-c的作用。


file2.o : file2.c file2.h
gcc -c file2.c -o file2.o

這兩句和上兩句相同。


clean:

rm -rf *.o helloworld

當用戶鍵入make clean命令時,會刪除*.o 和helloworld文件。


如果要編譯cpp文件,只要把gcc改成g++就行了。

寫好Makefile文件,在命令行中直接鍵入make命令,就會執行Makefile中的內容了。


到這步我想你能編一個Helloworld程序了。


上一層樓:使用變數

上面提到一句,如果要編譯cpp文件,只要把gcc改成g++就行了。但如果Makefile中有很多gcc,那不就很麻煩了。

第二個例子:

=== makefile 開始 ===
OBJS = file1.o file2.o
CC = gcc
CFLAGS = -Wall -O -g

helloworld : $(OBJS)
$(CC) $(OBJS) -o helloworld

file1.o : file1.c file2.h
$(CC) $(CFLAGS) -c file1.c -o file1.o

file2.o : file2.c file2.h
$(CC) $(CFLAGS) -c file2.c -o file2.o


clean:

rm -rf *.o helloworld
=== makefile 結束 ===


這里我們應用到了變數。要設定一個變數,你只要在一行的開始寫下這個變數的名字,後 面跟一個 = 號,後面跟你要設定的這個變數的值。以後你要引用 這個變數,寫一個 $ 符號,後面是圍在括弧里的變數名。


CFLAGS = -Wall -O –g,解釋一下。這是配置編譯器設置,並把它賦值給CFFLAGS變數。

-Wall: 輸出所有的警告信息。

-O: 在編譯時進行優化。

-g: 表示編譯debug版本。


這樣寫的Makefile文件比較簡單,但很容易就會發現缺點,那就是要列出所有的c文件。如果你添加一個c文件,那就需要修改Makefile文件,這在項目開發中還是比較麻煩的。



再上一層樓:使用函數

學到這里,你也許會說,這就好像編程序嗎?有變數,也有函數。其實這就是編程序,只不過用的語言不同而已。

第三個例子:

=== makefile 開始 ===
CC = gcc

XX = g++
CFLAGS = -Wall -O –g

TARGET = ./helloworld

%.o: %.c

$(CC) $(CFLAGS) -c lt; -o [email protected]

%.o:%.cpp

$(XX) $(CFLAGS) -c lt; -o [email protected]


SOURCES = $(wildcard *.c *.cpp)
OBJS = $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCES)))


$(TARGET) : $(OBJS)
$(XX) $(OBJS) -o $(TARGET)

chmod a+x $(TARGET)

clean:

rm -rf *.o helloworld
=== makefile 結束 ===

函數1:wildcard

產生一個所有以 '.c' 結尾的文件的列表。

SOURCES = $(wildcard *.c *.cpp)表示產生一個所有以 .c,.cpp結尾的文件的列表,然後存入變數 SOURCES 里。


函數2:patsubst

匹配替換,有三個參數。第一個是一個需要匹配的式樣,第二個表示用什麼來替換它,第三個是一個需要被處理的由空格分隔的列表。

OBJS = $(patsubst %.c,%.o,$(patsubst %.cc,%.o,$(SOURCES)))表示把文件列表中所有的.c,.cpp字元變成.o,形成一個新的文件列表,然後存入OBJS變數中。


%.o: %.c

$(CC) $(CFLAGS) -c lt; -o [email protected]

%.o:%.cpp

$(XX) $(CFLAGS) -c lt; -o [email protected]

這幾句命令表示把所有的.c,.cpp編譯成.o文件。

這里有三個比較有用的內部變數。 [email protected] 擴展成當前規則的目的文件名, lt; 擴展成依靠 列表中的第一個依靠文件,而 $^ 擴展成整個依靠的列表(除掉了裡面所有重 復的文件名)。


chmod a+x $(TARGET)表示把helloworld強制變成可執行文件。

❸ 如何在linux下寫makefile

Make工具最主要也是最基本的功能就是通過makefile文件來描述源程序之間的相互關系並自動維護編譯工作。而makefile 文件需要按照某種語法進行編寫,文件中需要說明如何編譯各個源文件並連接生成可執行文件,並要求定義源文件之間的依賴關系。

make命令的選項與參數

然後就完了。

❹ linux下怎麼編輯makefile文件!求助!!!!!!!!!!!

./configure --help可以查看幫助文檔,根據自己的需求寫各參數設置,執行./configure生成定製的makefile文件。
比如,apache源代碼安裝
./configure --prefix=/export/apache
安裝目錄在/export/apache

❺ 使用linux編程怎麼寫makefile

Makefile語法基礎
在Linux下,自動化編譯工具是通過make命令來完成的(一些工具廠商也提供了它們自己的make命令,如gmake等),make命令的基本格式如下:
make
[-f
makefile]
[label]
它可以通過-f參數指定輸入文件,當省略-f參數時,默認輸入文件名為Makefile,由於我們通常不用這個-f參數,往往就用默認的Makefile文件名。
Makefile是一個文本文件,它是基於一定的語法規則的,它的基本執行規則定義如下:
target
:
[prerequisites]
command
target
標簽,用於標志當前構建的規則,它也可以是文件。
prerequisites
依賴項,在構建該標簽的時候先執行的規則
command
make需要執行的命令。(任意的Shell命令)
注意:Makefile的target是頂格寫的,而Command需要加一個Tab鍵。我這里為了排版看起來舒服點,每一行都多加了一個Tab鍵,如果要使用本文的Makefile示例,請去掉各行的第一個Tab鍵,否則make的時候報錯。
例如,我們編寫一個簡單的Makefile:
clean:
@echo
"clean"
all:
@echo
"all"
當我們直接執行make命令的時候,輸出如下:
tianfang
>
make
clean
tianfang
>
make
all
all
tianfang
>
make
clean
clean
從中我們可以看到:默認情況下構建第一個標簽。可以通過在命令行參數中通過參數構建指定標簽。

❻ 在linux下怎麼makefile

Linux系統下makefile的作用把編寫好的源文件進行編譯與鏈接,makefile的基本格式如下:

target…
:prerequisite…
(Tab鍵)command
#格式解釋
target:生成的目標文件,可以是可執行文件,也可以是中間目標文件
prerequisite:生成target所需要的文件
command:make需要的執行命令,一般是編譯與鏈接的命令,命令前面必須要有Tab鍵才能有效果

makefile的簡單例子(用的Ubuntu11.10):

gcc–chello.c:編譯command目錄下的hello.c源文件,編譯之後會生成hello.o中間文件。
rm:刪除command目錄下的hello.o與exe.out文件
./exe.out:輸出exe.out可執行文件,hello.c中寫的是HelloWorld!
make:make命令與makeexe命令執行的效果是一樣的。

❼ LINUX下makefile文件的編寫

INC_PATH:=-I./include/
LIB_PATH:=-L./lib/
LIBS:=$(LIB_PATH)-lerr-larm
CC:=gcc
LD:=gcc
CFLAGS:=-O2-Wall$(INC_PATH)
SRC_PATH:=./source
SOURCE:=$(SRC_PATH)/a.c
$(SRC_PATH)/b.c
$(SRC_PATH)/c.c
TARGET:=target
OBJS:=a.ob.oc.o
$(TARGET):$(OBJS)
$(LD)-O2-o$(TARGET)$(OBJS)$(LIBS)
a.o:$(SRC_PATH)/a.c
$(CC)$(CFLAGS)-c-o$@$<
b.o:$(SRC_PATH)/b.c
$(CC)$(CFLAGS)-c-o$@$<
c.o:$(SRC_PATH)/c.c
$(CC)$(CFLAGS)-c-o$@$<
.PHONY:clean
clean:
-rm-f$(OBJS)

❽ 編譯Linux內核的具體步驟

1. 下載內核源代碼,並解壓家目錄
2. 設置好編譯環境
3. 修改好Makefile和.config
4. 執行make -j4
等一下,編譯就會結束了。

❾ 如何在linux下寫makefile

最近一直在研究這個

首先可以手寫makefile,需要你對makefile和需求有一定的了解,這種方法不推薦不詳述
其次使用autotools工具,只需要把所需要最後編譯生成的名字版本號還有源文件編寫好,用autotools工具實現編譯即可,具體使用方法網上有,不詳述
然後可以使用qmake,具體使用如上
最後說一個yocto,這東西可以實現單獨編譯,不需要自己寫makefile了,直接就幫你編好了

閱讀全文

與linuxmakefile編譯教程相關的資料

熱點內容
方舟伺服器怎麼玩才好玩 瀏覽:557
單片機的部件 瀏覽:621
編譯原理遍的過程 瀏覽:252
python讀取json字元串 瀏覽:62
ubuntu1404安裝php 瀏覽:628
lua能編譯嗎 瀏覽:116
思仙怎麼看伺服器 瀏覽:658
php微信圖片防盜鏈 瀏覽:798
安卓1怎麼讀音 瀏覽:291
農業app怎麼開通快捷支付 瀏覽:910
pythonredisdict 瀏覽:385
如何攻擊別人網賭伺服器 瀏覽:880
隱私與應用加密的圖案密碼 瀏覽:38
陳情令王一博解壓 瀏覽:39
c編譯器使用說明 瀏覽:707
鄭州前端程序員私活有風險嗎 瀏覽:14
小型螺桿機壓縮機 瀏覽:520
成人解壓最好的方法 瀏覽:52
最小製冷壓縮機 瀏覽:492
xampp支持python 瀏覽:371