2016-02-28 176 views
3

CMake的execute_process命令似乎只允許你執行一個進程 - 而不是任意一行你可以提供一個命令shell。事情是,我想要使用管道,文件描述符重定向等 - 並且這似乎不可能。替代會對我非常痛苦(我認爲)...CMake的execute_process和任意shell腳本

我該怎麼辦?

PS - CMake 2.8和3.x答案很有意思。

回答

5

您可以執行任何shell腳本。

當然,您需要小心避免引號和反斜槓。

5
  1. execute_process command seems to only let you, well, execute a process - not an arbitrary line you could feed a command shell.

是的,正是這一點是寫在documentation該命令:

所有參數逐字傳遞給子進程。沒有使用中間shell,因此諸如>的shell操作符被視爲普通參數。

  • I want to use pipes
  • 不同COMMAND相同execute_process調用中實際上通過管道輸送:

    運行一個或多個命令的給定序列與標準將每個進程的輸出傳送到下一個的標準輸入。

  • file descriptor redirection, etc. - and that does not seem to be possible.
  • 對於複雜的事情只是製備單獨外殼腳本和使用execute_process運行它。您可以使用其參數或初始限制configure_file將變量從CMake傳遞到此腳本。在字符串中的shell腳本,例如:

    execute_process(COMMAND bash "-c" "echo -n hello | sed 's/hello/world/;'" OUTPUT_VARIABLE FOO) 
    

    只是執行你的shell(如bash)的會產生含有worldFOO -

    +0

    我不能在不是開發機器的目標機器上準備一個獨特的shell腳本 - 或者,您是否建議我捆綁此shell腳本?一個額外的文件只是爲了那個? – einpoklum

    +0

    我的意思是* sources *中的其他shell腳本。如果您不在目標機器上執行構建,則不需要將此腳本放在那裏。 – Tsyvarev