makefile 条件配方不执行
makefile conditional recipe not executing
我有一个生成文件,它从几个目标文件生成一个可执行文件,并且我在编译每个目标文件时都包含一个版本号。但是,我希望版本号仅在创建特定目标文件时递增(下面的 ptarget,包含 main 的文件)。我尝试使用配方中的条件语句来做到这一点:
ptarget:=$(addsuffix .obj,$(ouf))
%.obj : %.cpp
$(CXX) $(CXXFLAGS) $< -Fo$@
$(info $(ptarget))
$(info $@)
ifeq ($@, $(ptarget))
perl $(perlDir)versionBump/bump.pl -inc -f $(versionFile)
endif
我可以从信息命令中看到,只有当构建 ptarget 时 $@ == $(ptarget) -- 我也尝试使用 strip 命令来确保没有隐藏的空格,但是 perl 命令来增加版本永远不会执行,它以制表符开头。
补充一下,这一切在没有条件的情况下都可以正常工作,但增量在构建过程中发生多次,这是我试图避免的。这 example 表明它应该工作但是...
这是对make的一个很普遍的误解。 ifeq
是一个 make 语句,在 make 解析 Makefile 时被评估。您需要的是一个条件,它在 shell 执行配方时得到评估,即 shell if
:
%.obj : %.cpp
$(CXX) $(CXXFLAGS) $< -Fo$@
$(info $(ptarget))
$(info $@)
if [ "$@" = "$(ptarget)" ]; then \
perl $(perlDir)versionBump/bump.pl -inc -f $(versionFile); \
fi
不要忘记续行(尾部 \
)。
我有一个生成文件,它从几个目标文件生成一个可执行文件,并且我在编译每个目标文件时都包含一个版本号。但是,我希望版本号仅在创建特定目标文件时递增(下面的 ptarget,包含 main 的文件)。我尝试使用配方中的条件语句来做到这一点:
ptarget:=$(addsuffix .obj,$(ouf))
%.obj : %.cpp
$(CXX) $(CXXFLAGS) $< -Fo$@
$(info $(ptarget))
$(info $@)
ifeq ($@, $(ptarget))
perl $(perlDir)versionBump/bump.pl -inc -f $(versionFile)
endif
我可以从信息命令中看到,只有当构建 ptarget 时 $@ == $(ptarget) -- 我也尝试使用 strip 命令来确保没有隐藏的空格,但是 perl 命令来增加版本永远不会执行,它以制表符开头。
补充一下,这一切在没有条件的情况下都可以正常工作,但增量在构建过程中发生多次,这是我试图避免的。这 example 表明它应该工作但是...
这是对make的一个很普遍的误解。 ifeq
是一个 make 语句,在 make 解析 Makefile 时被评估。您需要的是一个条件,它在 shell 执行配方时得到评估,即 shell if
:
%.obj : %.cpp
$(CXX) $(CXXFLAGS) $< -Fo$@
$(info $(ptarget))
$(info $@)
if [ "$@" = "$(ptarget)" ]; then \
perl $(perlDir)versionBump/bump.pl -inc -f $(versionFile); \
fi
不要忘记续行(尾部 \
)。