我正在编译名为libCMSDataFormat.so
的库。
编译libCMSDataFormat.so
时,它可能会生成一个(或多个).pcm
个文件(这取决于平台)。
如果生成了这些文件,则应将它们复制到另一个位置(称为$ OBJ)。
但如果它们不存在,该程序应该正常结束,即没有错误。
如果.pcm
文件生成,则以下情况有效,但对于未生成.pcm
文件的平台失败(即复制因未找到文件而出错)
SRC=../src
OBJ=../lib
all: $(OBJ) $(OBJ)/libCMSDataFormat.so MoveFile
.Phony : MoveFile
MoveFile: $(OBJ)/libCMSDataFormat.so
ifeq ($(*.pcm $(SRC)),)
@echo "copying.."
cp $(SRC)/*_rdict.pcm $(OBJ)
else
@echo "no .pcm found!"
endif
(Rule for `libCMSDataFormat.so` follows which might (or might not!) create one or more `*.pcm` files in `$(SRC)`.
欢迎任何建议让这两种情况都适用,最好也是为了生成多个.pcm
的情况。
答案 0 :(得分:0)
您遇到的问题是过早地评估条件。如果使用$(if)函数,那么它的评估将推迟到执行规则。这意味着它会看到任何.pcm文件被创建为早期构建阶段的副作用。
SRC=../src
OBJ=../lib
all: $(OBJ) $(OBJ)/libCMSDataFormat.so MoveFile
.Phony : MoveFile
MoveFile: $(OBJ)/libCMSDataFormat.so
$(if $(wildcard $(SRC)/*.pcm), \
@echo "copying.."; \
cp $(SRC)/*_rdict.pcm $(OBJ) \
, \
@echo "no .pcm found!")
当然,一个选项只是始终运行cp
,但忽略其返回代码(您可以通过在-
前面添加配方的第一行来完成此操作)。但是,不建议这样做,因为它还可以隐藏.pcm文件存在但无法复制时发生的错误。