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