cmake 不会设置MPI_C_LIBRARIES,除非它运行两次
cmake doesn't set MPI_C_LIBRARIES unless it's run twice
我正在尝试使用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时得到:
--找到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脚本中的某个地方设置了一个缓存变量。在第二次运行时,缓存的值可用于find脚本,从而使其能够完成作业。检查find脚本的源,以确定它依赖于全局和/或缓存变量值的位置
相关文章:
- Realloc 两次无法在 Visual Studio 上运行
- 谷歌测试发现在macOSX上添加并运行了我的所有测试两次
- C++:链接库两次,全局构造函数运行两次吗?
- 程序在运行两次后关闭
- *char数组到字符串(两次运行代码和两个不同的结果)
- 析构函数在 lambda 捕获说明符中声明的类实例上运行两次
- Cmake并需要两次运行才能成功构建代码
- 为什么输入文件的最后一行运行两次?
- c++ Google 测试运行两次
- Linux 守护进程 - 运行函数两次
- 我找不到导致我的数组在运行两次案例并退出后损坏的错误
- cmake 不会设置MPI_C_LIBRARIES,除非它运行两次
- 当循环应该只运行一次时,执行两次while循环(C++)
- 为什么这个C++/OpenGL程序运行两次
- 我的C++ Unity 插件在编辑器中运行一次,但不能运行两次
- 连续运行两次后的 scons 行为
- 函数在控制台中运行两次
- C++程序 尝试连续运行两次写入循环时显示".. stopped working"错误
- 如果同时运行两次wkhtmltopdf库,为什么它只会发生数据文档,而没有任何表或图像显示在html文件中
- c#包装到c++函数-运行一次,工作正常.运行两次,程序挂起