makefile将文件编译为库

时间:2014-01-17 16:07:50

标签: bash makefile

我是makefile的新手,最近我正在查看makefile并且无法理解这意味着什么

OBJS := $(SRCS:$(SRCDIR)/%.cpp=$(OBJDIR)/%.o)

where 
PROJECT_ROOT=.
EXTERNAL_ROOT=$(PROJECT_ROOT)/external
SRCDIR = $(PROJECT_ROOT)/src
OBJDIR = $(PROJECT_ROOT)/myobjs
BINDIR = $(PROJECT_ROOT)/mybins
DOCDIR = $(PROJECT_ROOT)/doc

它代表什么?另外我希望制作静态库,包括myobjs文件夹中的所有文件或$(OBJS)除main.o文件中的文件如何编写命令 ar -cvq mylibs / libCS296test.a $(OBJS);对于这种情况?

1 个答案:

答案 0 :(得分:1)

请针对截然不同的问题创建不同的SO请求。

对于您的第一个问题,这相当于此功能:

$(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SOURCES))

基本上说“查看$(SOURCES)变量的值,并且对于匹配模式$(SRCDIR)/%.cpp的每个单词,将其替换为模式$(OBJDIR)/%.o。所以,如果{{1} }包含将被SOURCES替换的单词./external/src/foo/bar/biz.cpp