【问题标题】:CMake ExternalProject_Add Stop Executing on WarningCMake ExternalProject_Add 在警告时停止执行
【发布时间】:2023-03-14 19:15:02
【问题描述】:

我正在使用一系列 ExternalPorject_Add 使用 CMake 静态下载、配置、构建和安装 QT5。一切顺利,直到配置脚本。 Qt5 配置脚本在静态编译时会发出以下警告,之后忽略构建和安装步骤:

CUSTOMBUILD : warning : Using static linking will disable the use of plugins.
           Make sure you compile ALL needed modules into the library.

我最终的 ExternaProject_Add 如下(还有其他的将下载步骤分成不同的目标):

  ExternalProject_Add(qt5_build
    DOWNLOAD_COMMAND "" UPDATE_COMMAND "" PATCH_COMMAND ""
    SOURCE_DIR ${QT5_REPO_PATH}
    CONFIGURE_COMMAND configure ${QT5_CONFIGURE}
    BUILD_COMMAND nmake BUILD_IN_SOURCE 1
    INSTALL_COMMAND nmake install
  )

对于如何让项目忽略警告(警告甚至是导致它停止的原因吗?)并继续构建和安装步骤有什么想法吗?

我目前在 Windows 上运行(使用跨平台安装程序),并使用带有 cmake 的 Visual Studio 2013 生成器。

谢谢!

【问题讨论】:

  • 谷歌搜索的警告信息怎么样?您可能会发现一些描述可能存在的问题的资源..
  • 唉...谷歌让我无法找到让 ExternalProject 忽略警告的方法 :)
  • ExternalProject_Add 忽略警告和错误消息:只有脚本的结果会影响其行为。并且给出警告(像任何其他警告一样)不太可能生成脚本的非零结果。顺便说一句,您总是可以尝试手动配置/构建/安装外部项目,看看会发生什么。或者您可以查看剩余的构建日志。

标签: qt visual-studio-2013 cmake


【解决方案1】:

我和你有同样的问题。事实证明,它与警告甚至退出代码(在这种情况下)无关。

这是因为 configure 文件是一个批处理文件,而 Visual Studio 正在另一个批处理文件中执行配置构建步骤。

这意味着如果您不在configure 前面使用关键字call,您将分支到configure.bat 并且永远不会返回并执行Visual Studio 配置步骤中的剩余步骤。

要解决此问题,您可以这样做:

ExternalProject_Add(qt5_build
    DOWNLOAD_COMMAND "" UPDATE_COMMAND "" PATCH_COMMAND ""
    SOURCE_DIR ${QT5_REPO_PATH}
    CONFIGURE_COMMAND call configure.bat ${QT5_CONFIGURE}
    BUILD_COMMAND nmake BUILD_IN_SOURCE 1
    INSTALL_COMMAND nmake install)

【讨论】:

    【解决方案2】:

    配置脚本返回一个非零结果,导致后续步骤失败,即使警告确实不是致命的。我已经不再使用ExternalProject,而是使用add_custom_target 实现了相同的功能。

    【讨论】:

    • add_custom_target 也会检查其 COMMAND 参数的返回值。与ExternalProject_Add 相比,它有何帮助?
    • 我不得不将它分成两个单独的自定义目标...首先是配置,其次是构建/安装命令。
    猜你喜欢
    • 2015-12-23
    • 1970-01-01
    • 2015-09-22
    • 2013-07-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多