根据我读过的有关makefile的信息,虚假目标是任何不符合实际文件名的目标。我的直觉表明,作为目标的目录将被视为与文件相同。在makefile中,目录名称是伪目标还是“真实”目标?
为什么这很重要?我有一个目录作为我的makefile中的目标。当我将它作为我的主要可执行文件的先决条件时,该可执行文件总是会生成,无论是否最新。如果我把它作为先决条件,我的makefile足够聪明,可以知道什么时候需要构建,但是我不知道是否需要创建目录。根据我读过的有关make的信息,任何虚假目标都不是先决条件,因为make并不知道它们是否是最新的,所以它们总是会重建相关的目标。这里是我的makefile的摘录。
$(EXEC_WITH_PATH): ${OBJ_DIR} $(DPEND) $(OBJS)
@echo "--------------------------------------------";
@echo "$(THIS_DIR) $(MACHINE)";
@echo "Linking Shared Library";
@echo "ar -rc $(EXEC_WITH_PATH) INSERT::{OBJS}";
ar -rc $(EXEC_WITH_PATH) $(OBJS);
@echo "--------------------------------------------";
# Make dirs for object code and links
${OBJ_DIR} :
@if [ ! -d ${OBJ_DIR} ]; then \
mkdir ${OBJ_DIR}; \
fi;
在这种情况下
那么,是${OBJ_DIR}
,目录名,假目标或没有?
无论如何,为了解决你的问题,你可以有一个mkdir命令前加一个“ - ”,这样就可以忽略返回值。 – siukurnin 2010-11-22 17:34:13
@siukurnin:不,你应该使用`mkdir -p`,这样,如果目录已经存在,它就会成功,但如果无法创建目录,则会失败。 – Cascabel 2010-11-22 18:01:40