一點一點學寫Makefile(5)-獲取文件所在路徑


我們在開發一套代碼時,應該保證工程放到任何一個目錄中均可以編譯成功,但是有時候鏈接庫的時候會造成編譯錯誤,本次就會告訴大家如何動態的獲得工程所在的絕對路徑

代碼下載目錄 選擇Makefile-5


  1. //makefile  
  2. CROSS =   
  3. CC = $(CROSS)gcc  
  4. CXX = $(CROSS)g++  
  5. DEBUG =   
  6. CFLAGS = $(DEBUG) -Wall -c  
  7. MV = mv -f  
  8. RM = rm -rf  
  9. LN = ln -sf  
  10.   
  11.   
  12. TOP_PATH = $(shell pwd)  
  13. SRC_PATH = $(TOP_PATH)/src/  
  14. BIN_PATH = $(TOP_PATH)/bin/  
  15. LIB_PATH = $(TOP_PATH)/lib/  
  16. INC_PATH = $(TOP_PATH)/include/  
  17.   
  18. SRCS = $(wildcard $(SRC_PATH)*.cpp)  
  19. OBJS = $(patsubst %.cpp, %.o, $(SRCS))  
  20. #LIBS += $(LIB_PATH)libconfig.a  
  21. LIBS += -lconfig  
  22.   
  23. VERSION = 1.0.0.0  
  24. TARGET = adx$(VERSION)  
  25.   
  26. all:$(TARGET)  
  27.     $(MV) $(TARGET) $(BIN_PATH)  
  28.     $(LN) $(BIN_PATH)/$(TARGET) $(BIN_PATH)/adx   
  29.   
  30. $(TARGET) : $(OBJS)  
  31.     $(CXX) $^ -o $@ -L$(LIB_PATH) $(LIBS)  
  32.   
  33. $(OBJS):%.o : %.cpp  
  34.     $(CXX) $(CFLAGS) $< -o $@ -I$(INC_PATH)  
  35.   
  36. .PHONY : clean  
  37. clean:  
  38.     $(RM) $(TARGET) $(OBJS)  


如上圖  TOP_PATH = $(shell pwd) 就可以獲取工程所在的絕對目錄,其他所有文件夾根據這個目錄來獲得目錄地址。

SRC_PATH = $(TOP_PATH)/src/
BIN_PATH = $(TOP_PATH)/bin/
LIB_PATH = $(TOP_PATH)/lib/
INC_PATH = $(TOP_PATH)/include/
看下面的代碼

SRCS = $(wildcard $(SRC_PATH)*.cpp)
OBJS = $(patsubst %.cpp, %.o, $(SRCS))
#LIBS += $(LIB_PATH)libconfig.a
LIBS += -lconfig

這幾句就是根據目錄獲得源文件、目標文件的名字,如果是靜態庫建議使用#LIBS += $(LIB_PATH)libconfig.a的方式,如果同一個目錄中既有靜態庫又有動態庫,系統有限選擇動態庫,請注意這點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM