一点一点学写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的方式,如果同一个目录中既有静态库又有动态库,系统有限选择动态库,请注意这点。

posted @ 2017-03-09 19:10  catgatp  阅读(10780)  评论(1编辑  收藏  举报