2013-12-12 16 views
0

不知道爲什麼這是不工作...以下CMake的腳本運行良好的窗口:Linux的EXEC程序沒有得到輸出值

exec_program(hg ${${PROJECT_NAME}_HGREMOTEDIR} 
ARGS "log" "-r" ${${PROJECT_NAME}_HG_HASH_CODE} "--template" "{latesttag}" 
OUTPUT_VARIABLE ${PROJECT_NAME}_HG_LAST_TAG) 

它獲取最新的標籤。但是,在Fedora 17中,當我嘗試運行${PROJECT_NAME}_HG_LAST_TAG時,結果空了。

我的第一個想法是,存儲庫的位置有點不對。所以,我試圖運行:

exec_program(hg ${${PROJECT_NAME}_HGREMOTEDIR} 
ARGS "log" "-r" ${${PROJECT_NAME}_HG_HASH_CODE} 
OUTPUT_VARIABLE ${PROJECT_NAME}_HG_LAST_TAG) 

這填補了${PROJECT_NAME}_HG_LAST_TAG有:

changeset: 368:a7ab3c8aca83 
branch:  Integration 
tag:   tip 
user:  ****** 
date:  Wed Dec 11 10:59:33 2013 -0500 
summary:  ****** 

所以後來我想,也許「latesttag」不是supported..But最新標籤「作品」在終端。

>hg log -r a7ab3c8aca83 --template "{latesttag}" 
2.0> 

所以我的最後一個雖然是由於某種原因, - 模板命令使它很糟糕。所以我做了一個模板,沒有外部的數據

汞柱登錄-r a7ab3c8aca83 --template富

然後在CMake的文件

exec_program(hg ${${PROJECT_NAME}_HGREMOTEDIR} 
ARGS "log" "-r" ${${PROJECT_NAME}_HG_HASH_CODE} "--template" "foo" 
OUTPUT_VARIABLE ${PROJECT_NAME}_HG_LAST_TAG) 

${PROJECT_NAME}_HG_LAST_TAG仍然是空的。什麼會造成這種情況?有沒有解決辦法?

+1

第一次完整性檢查:'hg --version'是否顯示與cmake相同的輸出,與您的命令行一樣? –

+0

它確實......我想我明白了。我將在下面的答案中,它似乎是cmake的錯誤 – IdeaHat

回答

1

看起來像CMake中的錯誤:輸出變量不會添加不以新行結尾的流的部分。

的exec_program(貓ARGS測試OUTPUT_VARIABLE TEST_VAR)

如果測試沒有在一個新行結束時,TEST_VAR不盡管在一個外殼終端有效的輸出填充。

如果測試一個新的行結束,則輸出填充

的修復,於我而言,是改變模板中包含換行:

exec_program(hg ${${PROJECT_NAME}_HGREMOTEDIR} 
ARGS "log" "-r" ${${PROJECT_NAME}_HG_HASH_CODE} "--template" "\"{latesttag}\\n\"" 
OUTPUT_VARIABLE ${PROJECT_NAME}_HG_LAST_TAG) 

然後是代碼工作(在Windows和Linux中)。