gpt4 book ai didi

c++ - 除非运行两次,否则 cmake 不会设置 MPI_C_LIBRARIES

转载 作者:太空狗 更新时间:2023-10-29 21:41:29 26 4
gpt4 key购买 nike

我正在尝试使用 cmake 通过 MPI 编译 C++ 代码。在 CMakeLists.txt 我有:

find_package(MPI)

以后

if(MPI_FOUND)
MESSAGE("{MPI_C_LIBRARIES}")
target_link_libraries(test ${MPI_C_LIBRARIES})
endif(MPI_FOUND)

我安装了 OpenMPI。我第一次运行 cmake 时得到:

-- Found MPI_CXX: /usr/local/lib/libmpi_cxx.dylib;/usr/local/lib/libmpi.dylib

以及应该打印 MPI_C_LIBRARIES 的空行。如果我尝试这样做,它不会链接到 MPI 库并给出错误。但是,如果我第二次运行 cmake,我会正确收到消息:

/usr/local/lib/libmpi_cxx.dylib;/usr/local/lib/libmpi.dylib

它很好地链接到图书馆。所以总而言之,我必须运行两次 cmake 以确保设置了 MPI_C_LIBRARIES。有谁知道这是正常现象还是我做错了什么?

最佳答案

很可能,您做错了什么。

find_package 调用应该在缓存中填充相应的变量。 find_package 调用一返回,您就应该能够使用结果。

至于可能出了什么问题:

  • 在尝试使用结果之前验证您确实执行了 find_package 调用。这对于简单的 CMake 文件来说应该很简单,但对于更复杂的构建脚本来说可能非常具有挑战性。慷慨地使用message命令应该有助于调试它。
  • 一旦您确定 find_package 调用发生在正确的位置,您需要确定是什么原因导致它在第二次运行时成功,而在第一次运行时失败。最有可能的是,您在调用 find_package 之后 在 CMake 脚本中的某处设置了一个缓存变量。在第二次运行时,缓存的值可用于查找脚本并允许它完成其工作。检查查找脚本的源以确定它依赖于全局和/或缓存变量的值的位置。

关于c++ - 除非运行两次,否则 cmake 不会设置 MPI_C_LIBRARIES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28733260/

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