我的 Makefile 包含此目标:
test: J=-j
test:
@echo "findstring = $(findstring $(J),$(MAKEFLAGS))"
@echo "J = $(J)"
ifeq ($(findstring $(J),$(MAKEFLAGS)),$(J))
@echo Yay Parallel
else
@echo Boo, Not Parallel
endif
结果出乎意料,即:
danny@USAR1LPDSZB9S3:~$ make -f fsw.mak test
findstring =
J = -j
Yay Parallel
danny@USAR1LPDSZB9S3:~$ make -j -f fsw.mak test
findstring = -j
J = -j
Yay Parallel
看来我不再理解字符串相等了。注意,这不是我第一次使用 Makefile
ifeq
,你可能会认为 "" <> "-j"
,说我疯了。
ifeq
在首次解析 makefile 时运行(如缺少缩进所示),而不是在配方符文时运行,因此此时尚未设置 J
。