Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 制作';保持清洁';求证_Makefile_Cmake - Fatal编程技术网

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上工作。我将更新答案以使用单个
=
。谢谢