CMAKE3:将通往MPI标头的路径设置
cmake3: set path to mpi headers
基于cmake:将路径设置为MPI标题和二进制文件,我将CMAKE文件设置为:
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做到:
CMAKE_MINIMUM_REQUIRED(VERSION 3.13.4)
the rest is the same as above
我得到此错误:
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)
有什么想法?
您正在遇到CMP0004
策略错误。在较早版本的Cmake中,链接的库会自动删除任何领先或落后的空格。在某些情况下,这可能会导致微妙的,不希望的错误,因此CMake现在执行此策略,NEW
行为,要求链接的库具有 no no 领先或落后的空间。看起来您的MPI目标之一就是与此链接,它具有领先的空格字符:
" -Wl,-rpath -Wl,/usr/lib64/openmpi/lib -Wl,--enable-new-dtags"
基于此CMAKE问题,此策略错误似乎是在CMAKE 3.9开始固定的。如果您正在运行超过3.9的Cmake,则必须修改FindMPI.cmake
文件以删除领先的空格,或者您可以告诉CMAKE为此策略使用旧行为(默默删除领先的Whitespace(:
cmake_policy(SET CMP0004 OLD)
这是cmake_policy
的文档。在FindMPI.cmake
文件中设置此策略的同时,不建议使用。制定了CMAKE策略以避免OLD
行为,因此建议您手动从文件手动删除空格。
注意:与不同版本的CMake测试时始终是这种情况,请确保您在切换版本时删除CMake Cache并从刮擦中构建。
相关文章:
- 在C++中设置基于操作系统的文件路径
- 为 QFileDialog 设置默认的 UNC 路径
- 将Visual Studio Code路径设置为.clang_format文件
- 如何设置 CMake 来构建包含路径包含的代码,如 #include < libdir/lib>?
- 在Visual Studio Code(.json配置)中设置相对于工作区路径的c / c ++项目的包含路径
- 如何从客户端为COM服务器设置dll搜索路径?
- 为自定义路径类型设置提升property_tree
- 如何在C++(JNI)中设置正在运行的JVM的类路径
- 如何在 pybind11 项目中设置包含路径
- 如何在不设置完整路径的情况下访问 c++ 中的资源
- 在makefile中设置GCC路径
- CMAKE3:将通往MPI标头的路径设置
- 在Windows上设置编译器路径
- 设置所需DLL文件的自定义路径:电子应用
- 通过程序代码行设置C++包含路径
- 我正在尝试在Eclipse中构建一个C 项目,但是即使在使用MINGW路径设置路径变量之后,也会获得构建错误
- 如何强制 Bazel 将库路径设置为所需的库路径
- 如果库的包含路径设置不符合预期,如何引发编译错误
- Clang 工具(libtooling):将标头搜索路径设置为标准 libs 标头.基础框架
- 尽管路径设置正确,但错误"C1083 cannot open include file gecode/int.hh"