在 cmake 中,我怎样才能始终执行一个进程? (或从 add_custom_command 捕获标准输出)
Posted
技术标签:
【中文标题】在 cmake 中,我怎样才能始终执行一个进程? (或从 add_custom_command 捕获标准输出)【英文标题】:In cmake, how can I always execute a process? (or capture stdout from add_custom_command) 【发布时间】:2017-03-31 00:40:31 【问题描述】:我在我的 cmake 项目中使用生成的文件。我有一个从某些输入生成源代码的脚本,如果给定不同的命令行参数,相同的脚本也可以验证输入,如下所示:
generate_code.py --generate
generate_code.py --validate
如果输入无效,--validate
模式会将错误打印到stdout
,我希望这些错误可见。我当前的设置是在execute_process
中使用--validate
,在add_custom_command
中使用--generate
。这可行,但不会在输入更改时从--validate
模式打印用户友好的错误消息,因为execute_process
不会再次运行。
发现这些错误的最佳方法是什么?如果我可以强制execute_process
始终运行,那将起作用,或者如果我可以在--generate
失败时捕获stdout
并显示出来,我可以修改--generate
选项以打印友好的错误消息,然后显示它们.我怎样才能做到其中一项或两项?
【问题讨论】:
【参考方案1】:只要您传递ALL
参数,每次执行构建时都会重新运行add_custom_target statements 中的命令。这可能是您正在寻找的。
或者,您可以使generate_code.py
的输入成为自定义命令的依赖项(如果它们还没有),并让自定义命令在generate_code.py --generate
之前执行generate_code.py --validate
。这样,它会在需要重建时重新验证,而不是在其他任何时候。
【讨论】:
这看起来很有希望。只有在我需要重建时重新验证才会很棒。你知道我如何捕获自定义命令的stdout
,以便在验证失败时显示它吗?
我认为您对 CMake-generate 时间运行的命令和 构建时间 运行的命令感到困惑。您可以捕获 execute_process
运行的命令的标准输出,因为 CMake 在您运行 CMake 脚本时会运行这些命令。您无法捕获来自add_custom_command
和add_custom_target
的输出,因为这些命令是由make
在构建时运行的。如果您确实需要捕获该输出,您可以 做的是编写一个使用execute_process
的CMake 脚本并通过使用add_custom_command
调用它来执行cmake -P
但是,我建议让generate_code.py --validate
在验证失败时返回错误退出代码并将结果打印到屏幕上。这样,make
将看到错误代码并停止构建,您将能够看到打印的错误消息。以上是关于在 cmake 中,我怎样才能始终执行一个进程? (或从 add_custom_command 捕获标准输出)的主要内容,如果未能解决你的问题,请参考以下文章
我怎样才能等到 Qt 的 keyevents 中的每个进程完成?
我怎样才能杀死正在使用端口 8080 的任何进程,以便我可以流浪?
在wpf中使用Process.Start()启动了一个程序,要怎样才能等待这个程序执行完并输出结果后再执行后面的语句
我怎样才能始终如一地自动化,使用 TFS vNext 构建步骤,构建我们的开发团队使用 Visual Studio 工作的任何解决方案文件?