不确定为什么这不起作用......以下cmake脚本在Windows上运行良好:
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”。但是最新的标签“工作”在一个终端。
>hg log -r a7ab3c8aca83 --template "{latesttag}"
2.0>
所以我的最后一次是由于某种原因, - template命令使它变坏。所以我制作了一个没有外部数据的模板
hg log -r a7ab3c8aca83 --template foo
然后在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
仍为空。什么会导致这个?有工作吗?
答案 0 :(得分:1)
看起来像是CMake中的一个错误:输出变量不会添加不以新行结尾的流的部分。
exec_program(cat ARGS test OUTPUT_VARIABLE TEST_VAR)
如果测试没有以新行结束,则尽管shell终端中的输出有效,但未填充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中)。