gpt4 book ai didi

c++ - Linux exec 程序没有得到输出值

转载 作者:行者123 更新时间:2023-11-28 07:13:53 24 4
gpt4 key购买 nike

不确定为什么这不起作用...以下 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 仍然是空的。什么会导致这个?有变通办法吗?

最佳答案

看起来像是 CMake 中的错误:输出变量不会添加不以换行结尾的流部分。

exec_program(cat ARGS 测试 OUTPUT_VARIABLE TEST_VAR)

如果测试没有以新行结束,则 TEST_VAR 不会被填充,尽管 shell 终端中的输出有效。

如果测试以新行结束,则输出被填充。

就我而言,解决方法是更改​​模板以包含换行符:

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 中)。

关于c++ - Linux exec 程序没有得到输出值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20547793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com