gpt4 book ai didi

c - 如何将 CMake 的输出重定向到文件而不是 Windows cmd 提示符

转载 作者:太空宇宙 更新时间:2023-11-04 03:09:11 26 4
gpt4 key购买 nike

我正在使用 CMake 计算 C 项目的编译时间以进行编译统计。

您可以在下面看到我用于打印编译时间的 CMake cmd:

set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time") 
set_property(TARGET ${MAIN_TARGET} PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time")

这行代码在 Windows cmd 提示符下打印出来(例如):

Elapsed time: 0 s. (time), 0.000672 s. (clock)

所以计算对我来说是按预期进行的。但我希望将计算出的时间列在 .txt 文件中,而不是在 cmd 提示符下打印出来。

我在这里找到了解决方案: How to save CMake output to file?

cmake ... >> output_file.txt 2>&1
cmake ... 2>> output_file.txt

但我不明白如何将它用于我上面列出的 CMake cmd。我试过如下,但不幸的是它不起作用:

set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time" >> output_file.txt 2>&1) 
set_property(TARGET ${MAIN_TARGET} PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E time" >> output_file.txt 2>&1)

我做错了什么?

最佳答案

由于 RULE_LAUNCH_COMPILE 指定了命令前缀,并且流重定向在 shell 命令的末尾进行,因此无法像这样使用它。

此外,CMake 中指定的命令不是 shell 命令。这意味着特殊字符将不会被解释,而只是作为命令的参数。

总而言之,您要尝试做的事情将扩展为如下内容:

cmake -E time >> output_file.txt 2>&1 gcc...

这不会由 shell 执行,而是由 CMake 本身执行,因此它将失败,因为时间将尝试执行名为“>>”的命令。

您的解决方案是使用中间脚本,例如:

@echo off
time %* >> output_file.txt

我们将此命名为 trace.cmd%* 的使用意味着我们将所有参数带到脚本并将它们作为参数传递给 time 命令。

然后你可以像这样使用它:

set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CMAKE_COMMAND} -E trace.cmd")

免责声明:我尚未测试该解决方案。

关于c - 如何将 CMake 的输出重定向到文件而不是 Windows cmd 提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58319429/

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