这只是一个makefile的一部分.我不太明白发生了什么.
OBJS = $(SRCS:$(SRC)/%.cpp=$(OBJ)/%.o)
$(OBJS):$(OBJ)/%.o: $(SRC)/%.cpp | print-opts
$(cc-command)
Run Code Online (Sandbox Code Playgroud)
我理解的是这些行在'print-opts'之后用'cc-command'将.cpp文件编译成.o文件.但我不懂语义.
如果我展开'OBJS'的宏,这一行应该是:
$(SRCS:$(SRC)/%.cpp=$(OBJ)/%.o) : $(OBJ)/%.o: $(SRC)/%.cpp | print-opts
$(cc-command)
Run Code Online (Sandbox Code Playgroud)
对我来说,它看起来像'$(SRCS:$(SRC)/%.cpp = $(OBJ)/%.o)',它声称$(SRC)中的所有.cpp将以$($)来兑换. OBJ),但这取决于$(OBJ)/%.o,这取决于$(SRC)/%.cpp.这没有意义......
我不明白这里等号的意思是什么,以及多个冒号是什么意思.
Bet*_*eta 17
假设您已经定义了这三个变量(如果没有,那么规则将无法正常工作):
SRC = source_dir
OBJ = object_dir
SRCS = source_dir/foo.cpp source_dir/bar.cpp
Run Code Online (Sandbox Code Playgroud)
现在考虑分配
OBJS = $(SRCS:$(SRC)/%.cpp=$(OBJ)/%.o)
Run Code Online (Sandbox Code Playgroud)
这是替代参考 ; 它说"对于任何$(SRCS)具有形式的东西$(SRC)/%.cpp,将其改为$(OBJ)/%.o".所以OBJS会评估object_dir/foo.o object_dir/bar.o.
现在规则:
$(OBJS):$(OBJ)/%.o: $(SRC)/%.cpp | print-opts
$(cc-command)
Run Code Online (Sandbox Code Playgroud)
Thuis是一种静态模式规则.它指定了目标($(OBJS)),目标模式($(OBJ)/%.o)和先决条件模式($(SRC)/%.cpp)的列表.使匹配成为目标模式的目标,并使用它来构造先决条件名称.因此,如果Make使用此规则来构建object_dir/foo.o,那么干将是foo先决条件source_dir/foo.cpp.
(你没有问过| print-opts,所以我认为它已经很清楚了.)
| 归档时间: |
|
| 查看次数: |
4317 次 |
| 最近记录: |