首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cmake3:设置mpi头的路径

cmake3:设置mpi头的路径
EN

Stack Overflow用户
提问于 2019-07-31 12:07:25
回答 1查看 199关注 0票数 0

基于CMake:手动设置MPI头和二进制文件的路径,我将cmake文件设置为:

代码语言:javascript
复制
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
SET(TARGET "test")
PROJECT(${TARGET})
add_compile_options(-std=c++11)
set(CMAKE_CXX_FLAGS "-std=c++11" CACHE STRING "compile flags" FORCE)

find_package(MPI REQUIRED)
if (MPI_FOUND)
    include_directories(SYSTEM ${MPI_INCLUDE_PATH})
else (MPI_FOUND)
    message(SEND_ERROR "couldn't find MPI")
endif (MPI_FOUND)
add_executable(${TARGET} somefiles)
target_link_libraries(${TARGET} ${MPI_LIBRARIES})

而且效果很好。但是当我用cmake3做这件事时:

代码语言:javascript
复制
CMAKE_MINIMUM_REQUIRED(VERSION 3.13.4)
the rest is the same as above

我知道这个错误:

代码语言:javascript
复制
CMake Error at /home/nourisaj/c++/WP1/build/CMakeFiles/CMakeTmp/cmTC_3d1ffTargets.cmake:16 (add_library):
  Target "MPI::MPI_C" links to item " -Wl,-rpath -Wl,/usr/lib64/openmpi/lib
  -Wl,--enable-new-dtags" which has leading or trailing whitespace.  This is
  now an error according to policy CMP0004.
Call Stack (most recent call first):
  /home/nourisaj/c++/WP1/build/CMakeFiles/CMakeTmp/CMakeLists.txt:14 (include)


CMake Error at /home/nourisaj/c++/WP1/build/CMakeFiles/CMakeTmp/cmTC_3d1ffTargets.cmake:16 (add_library):
  Target "MPI::MPI_C" links to item " -Wl,-rpath -Wl,/usr/lib64/openmpi/lib
  -Wl,--enable-new-dtags" which has leading or trailing whitespace.  This is
  now an error according to policy CMP0004.
Call Stack (most recent call first):
  /home/nourisaj/c++/WP1/build/CMakeFiles/CMakeTmp/CMakeLists.txt:14 (include)


CMake Error at /usr/share/cmake3/Modules/FindMPI.cmake:1187 (try_compile):
  Failed to generate test project build system.
Call Stack (most recent call first):
  /usr/share/cmake3/Modules/FindMPI.cmake:1228 (_MPI_try_staged_settings)
  /usr/share/cmake3/Modules/FindMPI.cmake:1488 (_MPI_check_lang_works)
  CMakeLists.txt:19 (find_package)

知道吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-31 12:34:32

您正遇到CMP0004策略错误。在早期版本的CMake中,链接库会自动删除任何前导或尾随空格。在某些情况下,这会导致一些微妙的错误,因此CMake现在强制执行这个策略,NEW行为要求链接库没有前导或尾随空格。看起来您的MPI目标之一就是链接到它,它有一个前导空格字符:

代码语言:javascript
复制
" -Wl,-rpath -Wl,/usr/lib64/openmpi/lib -Wl,--enable-new-dtags"

基于此CMake 问题,此策略错误似乎已修复为CMake 3.9。如果运行的CMake大于3.9,则必须自己修改FindMPI.cmake文件,以删除前导空格,或者告诉CMake对此策略使用旧的行为(静默删除前导空格):

代码语言:javascript
复制
cmake_policy(SET CMP0004 OLD)

这是cmake_policy的文档。虽然在FindMPI.cmake文件中设置此策略可能有效,但不建议这样做。设置CMake策略是为了避免OLD行为,因此建议您手动从文件中删除空白。

注意:在使用不同版本的CMake进行测试时,总是如此,请确保您正在删除CMake缓存,并在切换版本时从头开始构建。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57290410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档