我试图用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。有谁知道这是正常的还是我做错了什么?
答案 0 :(得分:2)
最有可能的是,你做错了什么。
find_package
调用应该填充缓存中的相应变量。只要find_package
调用返回,您就应该能够使用结果。
关于可能出现的问题:
find_package
调用。这对于简单的CMake文件应该是直截了当的,但对于更复杂的构建脚本来说可能非常具有挑战性。大量使用message
命令应该有助于调试它。find_package
调用发生在正确的位置,您需要确定导致它在第二次运行时成功的原因,而在第一次运行时失败。最有可能的是,在调用find_package
之后,在CMake脚本中的某处设置了一个缓存变量。在第二次运行时,缓存的值可用于查找脚本,并允许它完成其作业。检查find脚本的源,以确定它取决于全局和/或缓存变量值的位置。