天天看點

Makefile通用編譯動态庫檔案

以下為通用代碼,隻需修改目标檔案名即可

CXX = g++
TARGET = libtinyxml.so
#查找所有目錄下所有cpp檔案
SOURCES :=  $(wildcard *.cpp)
OBJECTS = $(SOURCES:.cpp=.o)

$(TARGET):$(OBJECTS)
	$(CXX) -o $(TARGET) $(OBJECTS) -shared
.cpp.o:
	$(CXX) -o [email protected] -c $< -fPIC
clean:
	rm -rf $(OBJECTS)
	rm -f $(TARGET)
           

查找目前目錄下所有源檔案

編譯庫:必備的編譯條件 : -shared

$(CXX) -o $(TARGET) $(OBJECTS) -shared
           

編譯.o檔案 : 自動推導依賴頭檔案 : .cpp.o:

-fPIC 作用于編譯階段,告訴編譯器産生與位置無關代碼(Position-Independent Code)

如果不加-fPIC,則加載.so檔案的代碼段時,代碼段引用的資料對象需要重定位, 重定位會修改代碼段的内容,這就造成每個使用這個.so檔案代碼段的程序在核心裡都會生成這個.so檔案代碼段的copy.從GCC來看,shared應該是包含fPIC選項的,但似乎不是是以系統都支援,是以最好顯式加上fPIC選項.

.cpp.o:
	$(CXX) -o [email protected] -c $< -fPIC
           

繼續閱讀