1. 程式人生 > >MAKE FILE 相關

MAKE FILE 相關

CFLAGS 表示用於C編譯器的選項 
CXXFLAGS 表示用於C++編譯器的選項 
這兩個變數實際上涵蓋了編譯和彙編的兩個步驟

CFLAGS:指定標頭檔案(.h)的路徑,如:CFLAGS=-I/usr/include -I/path/include 。

相同地,安裝一個包時會在安裝路徑下建立一個include資料夾,當安裝過程中出現故障時,試著把曾經安裝的包的include資料夾增加到該變數中來。

LDFLAGS:gcc 等編譯器會用到的一些優化引數,也能夠在裡面指定庫檔案的位置。

使用方法:LDFLAGS=-L/usr/lib -L/path/to/your/lib。每安裝一個包都差點兒一定的會在安裝資料夾裡建立一個lib資料夾。假設明明安裝了某個包,而安裝還有一個包時,它愣是說找不到,能夠抒那個包的lib路徑增加的LDFALGS中試一下。

LIBS:告訴連結器要連結哪些庫檔案。如LIBS = -lpthread -liconv

簡單地說,LDFLAGS是告訴連結器從哪裡尋找庫檔案,而LIBS是告訴連結器要連結哪些庫檔案。

有時候LDFLAGS指定-L儘管能讓連結器找到庫進行連結。可是執行時連結器卻找不到這個庫。假設要讓軟體執行時庫檔案的路徑也得到擴充套件,那麼我們須要增加這兩個庫給”-Wl,R”:

LDFLAGS = -L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib

假設在執行./configure曾經環境變數設定export LDFLAGS=”-L/var/xxx/lib -L/opt/mysql/lib -Wl,R/var/xxx/lib -Wl,R/opt/mysql/lib” ,注意環境變數設定等號兩邊不能夠有空格,並且要加上引號(shell的使用方法)。那麼執行configure以後。Makefile將會設定這個選項。連結時會有這個引數,編譯出來的可執行程式的庫檔案搜尋路徑就得到擴充套件了。

 

 

MAKEFILE 模板


#SOURCE  := $(wildcard *.c) $(wildcard *.cpp)
#OBJS    := $(patsubst %.c,%.o,$(patsubst %.cpp,%.o,$(SOURCE)))
LOCAL_PATH = ..

SRCS = $(wildcard *.cpp)

OBJS = $(SRCS:.cpp = .o)

CC = arm-linux-uclibcgnueabi-g++


INCLUDES = -I../../include \
           -I. \

LIBSPATH = -L../../lib

LIBS = -lxxx -lxxxx -lxxx

CXXFLAGS  = -g -Wall

OUTPUT = output

all:$(OUTPUT)

$(OUTPUT) : $(OBJS)
    $(CC) $^ -o [email protected] $(INCLUDES) $(LIBSPATH) $(LIBS)

%.o : %.cpp
    $(CC) -c $< $(CXXFLAGS)

clean:
    rm -rf $(OUTPUT) *.o

.PHONY:clean