我正在研究一个使用facebook的proxygen库的项目。
后者通过名为deps.sh
的脚本构建自身,该脚本用于以超级用户身份调用apt-get
。
我已使用cmake
指令成功创建了add_custom_target
的自定义目标,但由于上述调用错误sudo: no tty present and no askpass program specified
而失败,当然这是有道理的。
无论如何,我无法找到执行该脚本的方法,因此使用add_custom_target
作为超级用户调用命令。
我可以安全地安装库并为我的同事编写一个FindProxygen
模块,以便构建过程保持一致,但我想知道是否有一个干净的解决方案来解决以root身份启动命令的问题。 cmake
因此将库作为项目的子模块。
答案 0 :(得分:1)
您可以在新终端中运行安装脚本,因此由此脚本执行的sudo
将照常运行。
COMMAND x-terminal-emulator -e "<...>/deps.sh"
(这可以写成add_custom_target
,add_custom_command
,execute_process
等的一部分。)
答案 1 :(得分:0)
响应很简单:没有。
正如评论中所述, cmake 期望找到系统中已安装的所有必需库(或至少在搜索路径中),任何其他解决方案都会停止执行并等待用户输入。
就我所见,通常的方法,我在上面提到的项目中使用的那个,以及之后立即启动的另一个方法,是创建一个负责下载,编译和编写的脚本。准备项目环境,就像 proxygen 本身一样。
最终用户将被要求首先执行该脚本,因此他将能够继续使用 cmake 。
就是这样,谢谢你的评论。
答案 2 :(得分:0)
add_custom_target(
apt-downloads ALL
COMMAND sudo apt install -y ${DEPENDENCY_LIBRARIES}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
COMMENT "download required dependencies straight from apt on ubuntu"
)
为我工作