2015-07-21 26 views
0

我正在使用facebook的proxygen庫。 後者通過名爲deps.sh的腳本構建,該腳本用於調用apt-get作爲超級用戶。 我已經使用add_custom_target指令成功創建了一個自定義目標cmake,但由於上述調用錯誤sudo: no tty present and no askpass program specified而失敗,這當然是有道理的。在使用cmake時,是否有可能以超級用戶的身份執行命令?

無論如何,我一直無法找到執行該腳本的方法,因此使用add_custom_target作爲超級用戶調用命令。 我可以安全地安裝庫併爲我的同事編寫一個FindProxygen模塊,以便構建過程保持一致,但我想知道是否有一個乾淨的解決方案來解決從cmake以root身份啓動命令的問題,從而將該庫作爲項目的子模塊。

+0

'find '模塊通常需要項目在'find_package()'調用時已經安裝,即**配置**階段。因此,在'add_custom_target'中安裝'proxygen'不適合你:它在** build **階段執行命令。無論如何,在超級用戶下執行一些命令並不是一個特定於cmake的問題:它取決於你,在項目安裝期間(或另一階段)如何請求管理員權限。 – Tsyvarev

+0

Tsyvarev是正確的,您需要在配置時或之前安裝'proxygen'。不要添加自定義目標,而是手動或從一些'install-deps.sh'腳本手動安裝'proxygen',或者在配置時間內調用'execute_process'(有條件調用它,所以如果已經安裝,請不要安裝)。我猜你可以像往常一樣在'execute_process'中設置askpass。 –

+0

是的,我知道,我想將proxygen添加爲子模塊(我們使用git)來凍結其散列,但這樣做意味着在下載之後也會編譯它,這意味着執行需要root權限的自定義命令。我知道這很棘手,使用find *是一種更清潔的方法。 – skypjack

回答

0

的響應是相當簡單:沒有。

正如評論所說,cmake的希望找到所有已經安裝在系統中(或者至少,內部的搜索路徑)和任何其他的解決辦法停止執行,等待用戶輸入所需的庫。

據我所見,通常的做法,我在上面提到的項目中也使用過,在另一個項目中立即開始,就是創建一個腳本負責下載,編譯並準備項目環境,同樣的方法proxygen本身。

最終用戶將被要求首先執行該腳本,因此他將能夠繼續使用cmake

就這些,謝謝你的評論。

1

您可以在新終端中運行安裝腳本,因此此腳本執行的sudo將照常工作。

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

(這可以被寫爲add_custom_commandexecute_processadd_custom_target部分,等)

相關問題