Makefile 制作';保持清洁';求证
是否有办法使命令Makefile 制作';保持清洁';求证,makefile,cmake,Makefile,Cmake,是否有办法使命令makeclean需要用户确认?我错误地执行了它,现在我必须等待6个小时才能再次完成构建 Makefiles是由cmake创建的 所需的工作流程: > make clean > [make] Are you sure you want to remove all the built files? [Y/N] > N > [make] Target 'make clean' not executed. > make clean > [make]
makeclean
需要用户确认?我错误地执行了它,现在我必须等待6个小时才能再次完成构建
Makefile
s是由cmake
创建的
所需的工作流程:
> make clean
> [make] Are you sure you want to remove all the built files? [Y/N]
> N
> [make] Target 'make clean' not executed.
> make clean
> [make] Are you sure you want to remove all the built files? [Y/N]
> Y
> [make] Target 'make clean' executed.
我不熟悉cmake,但对于gnu make,一个可能的黑客是:
clean: check_clean
check_clean:
@echo -n "Are you sure? [y/N] " && read ans && [ $${ans:-N} = y ]
.PHONY: clean check_clean
如果
check\u clean
失败(用户未键入y
),则在执行清理之前,make将以错误退出。CMake没有在make clean
上进行此类“提示”的选项。我也不知道如何为清洁目标附加额外的行动。(影响makeclean
行为的唯一方法是将文件添加到)。您可以创建另一个目标(例如,makeremove
),在其中调用某种“提示符”,然后makeclean
。将检查作为先决条件是明智的。可能还有一个变体可以通过更多的BASH脚本在clean
规则配方中使用相同的检查。这可能会让您在构建其他目标的同时将clean设置为可选。因为OP使用的是cmake,他可能需要跨平台…所以BASH可能是不可靠的。使用python可能有一些等价的功能?有点改进:@echo-n“你确定吗?[y/n]”和&read-ans&[${ans:-n}==y]
我在使用case:@(read-p“你确定吗?”[y/n]:[y]中的“确定和案例”$$sure”是真的;;*)假的;;亨利:你确定它是[${ans:-N}==y]
而不是[${ans:-N}=y]
?当使用您的命令时,我的Makefile在键入任何内容时都会失败,但是当我更改为单个相等字符时,我工作得很好。这两个字符都适用于我,但我只是查找了一下,显然==
不符合Posix,因此可能无法在某些shell上工作。我将更新答案以使用单个=
。谢谢