微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

等待CMake版本中的目标

如何解决等待CMake版本中的目标

我认为我确实有CMake顺序/并行性问题。

在构建过程中,我需要构建一个工具,然后供其他目标使用。该工具是一个单独的项目,带有CMakeLists.txt文件,如下所示:

project (package-tool LANGUAGES CXX)
set (SOURCES package_tool.cpp)
...

在构建的后期,此其他顶级目标引用了该顶级目标:

...
add_custom_command (OUTPUT "${DST_FILE}"
                            COMMAND ${PACKAGE_COMMAND} "${DST_FILE}"
                            COMMAND package-tool.exe -e "${DST_FILE}"
                            DEPENDS ${PACKAGE_DEPENDENCIES} package-tool)
...

我使用忍者进行构建,并且依赖项(忍者-t依赖)看起来正确。同样,构建命令(ninja -t命令)也很有意义。但是:有时,构建会失败。该消息没有意义,显示为:

此版本的package-tool.exe与该版本不兼容 您正在运行的Windows。

因为构建并行运行(32个进程),所以我怀疑在第二个目标中使用生成的exe时,打包工具目标未完成,这可能会导致此令人困惑的错误消息。同样,在大多数情况下,构建成功,但是每运行10或20次,它都会失败并显示该消息。

所以我的问题是:

  • 有没有办法等待在CMake / Ninja中以并行构建方式完成工具/目标的构建?
  • 或者我该如何在相同的构建过程中正确处理构建工具的任务?

提前谢谢!

解决方法

实际上取决于可执行文件并运行可执行文件,而不是目标文件。不要担心任何.exe后缀。另外最好不要假设add_custom_command将在CMAKE_RUNTIME_OUTPUT_DIRECTORY中运行-如果您依赖于特定目录,请使用WORKING_DIRECTORY对其进行显式设置。

add_custom_command (
    OUTPUT "${DST_FILE}"
    COMMAND ${PACKAGE_COMMAND} "${DST_FILE}"
    COMMAND $<TARGET_FILE:package-tool> -e "${DST_FILE}"
    DEPENDS ${PACKAGE_DEPENDENCIES} $<TARGET_FILE:package-tool>
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。