You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 10:37:06