是否可以在使用cmake时以超级用户身份执行命令?

时间:2015-07-21 13:18:35

标签: cmake

我正在研究一个使用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因此将库作为项目的子模块。

3 个答案:

答案 0 :(得分:1)

您可以在新终端中运行安装脚本,因此由此脚本执行的sudo将照常运行。

COMMAND x-terminal-emulator -e "<...>/deps.sh"

(这可以写成add_custom_targetadd_custom_commandexecute_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"
    )

为我工作