CMake中TARGET型add_custom_command的USES_TERMINAL在Ninja下不生效
CMake中TARGET类型add_custom_command的USES_TERMINAL未按预期工作
为了让sudo命令在构建时弹出密码提示,我在TARGET类型的add_custom_command中添加了USES_TERMINAL参数,示例CMakeLists.txt代码如下:
add_executable(my-app main.c) add_custom_command( TARGET my-app POST_BUILD COMMAND sudo setcap cap_net_admin+eip $<TARGET_FILE:my-app> USES_TERMINAL )
使用Ninja进行配置和构建:
$ cmake -G Ninja -B build $ cmake --build build
执行后发现密码提示并未弹出,构建直接挂起。查看生成的build.ninja文件,未找到预期的pool = console配置:
build my-app: C_EXECUTABLE_LINKER__my-app_ CMakeFiles/my-app.dir/main.c.o OBJECT_DIR = CMakeFiles/my-app.dir POST_BUILD = cd /home/bob/test_cmake_uses_terminal/build && sudo setcap cap_net_admin+eip /home/bob/test_cmake_uses_terminal/build/my-app PRE_LINK = : TARGET_COMPILE_PDB = CMakeFiles/my-app.dir/ TARGET_FILE = my-app TARGET_PDB = my-app.pdb
手动为该构建规则添加pool = console后,sudo命令能正常弹出密码提示。目前我已经通过add_custom_target实现了需求,但不清楚为何USES_TERMINAL参数未按CMake文档的预期工作。
环境信息:CMake 3.24.1,Ubuntu 22.04
更新:已向CMake官方提交Bug报告
内容的提问来源于stack exchange,提问作者Billy
相关产品推荐
相关产品推荐

