如何让 CMake 找到 OpenMP_C、OpenMP_CXX 等?

Eri*_*ush 6 macos cmake openmp

我对使用终端相当陌生,我正在尝试使用 cmake 为涉及公共交通路线的项目配置构建。当我尝试进行构建时,我在终端中收到以下响应:

$ cmake ..
-- Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES) 
-- Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES) 
-- Could NOT find OpenMP (missing: OpenMP_C_FOUND OpenMP_CXX_FOUND) 
CMake Warning at CMakeLists.txt:33 (message):
  Configuring without OpenMP!


CMake Error at src/CMakeLists.txt:13 (add_subdirectory):
  The source directory

    /Users/ericbush/Desktop/the-one/toolkit/gtfs/pfaedle/src/cppgtfs

  does not contain a CMakeLists.txt file.


CMake Error at src/CMakeLists.txt:14 (add_subdirectory):
  The source directory

    /Users/ericbush/Desktop/the-one/toolkit/gtfs/pfaedle/src/configparser

  does not contain a CMakeLists.txt file.


-- Configuring incomplete, errors occurred!
See also "/Users/ericbush/Desktop/the-one/toolkit/gtfs/pfaedle/build/CMakeFiles/CMakeOutput.log".
See also "/Users/ericbush/Desktop/the-one/toolkit/gtfs/pfaedle/build/CMakeFiles/CMakeError.log".
Run Code Online (Sandbox Code Playgroud)

以下是我认为 CMakeLists.txt 文件中的相关代码:

find_package(OpenMP)

if (OPENMP_FOUND)
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
endif()


# set compiler flags, see http://stackoverflow.com/questions/7724569/debug-vs-release-in-cmake
if(OPENMP_FOUND)
    set(CMAKE_CXX_FLAGS            "-fopenmp -Ofast -fno-signed-zeros -fno-trapping-math -Wall -Wno-format-extra-args -Wextra -Wformat-nonliteral -Wformat-security -Wformat=2 -Wextra -Wno-implicit-fallthrough -pedantic")
else()
    message(WARNING "Configuring without OpenMP!")
    set(CMAKE_CXX_FLAGS            "-Ofast -fno-signed-zeros -fno-trapping-math -Wall -Wno-format-extra-args -Wextra -Wformat-nonliteral -Wformat-security -Wformat=2 -Wextra -Wno-implicit-fallthrough -pedantic")
endif()
set(CMAKE_CXX_FLAGS_DEBUG          "-Og -g -DLOGLEVEL=3 -DPFAEDLE_DBG=1")
set(CMAKE_CXX_FLAGS_MINSIZEREL     "${CMAKE_CXX_FLAGS} -DLOGLEVEL=2")
set(CMAKE_CXX_FLAGS_RELEASE        "${CMAKE_CXX_FLAGS} -DLOGLEVEL=2")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} -g -DLOGLEVEL=3")
Run Code Online (Sandbox Code Playgroud)

我在这个网站和其他网站上发现了一些类似的问题,但我仍然很难理解这个问题,因为我以前从未使用过 cmake,并且如上所述,我对使用终端有点陌生。如果您能提供有关错误消息实际告诉我的内容的任何信息,或者有关我可以采取的步骤/可以尝试解决问题的任何建议,我将非常感激。我正在 Mac 上工作,如果有人想知道的话。

Ric*_*ber 5

为了让编译器看到 OpenMP,您可能需要在 cmake 命令中设置以下选项(对于位于 中的依赖项/opt/local):

cmake .. \
-DOpenMP_C_FLAGS=-fopenmp=lomp \
-DOpenMP_CXX_FLAGS=-fopenmp=lomp \
-DOpenMP_C_LIB_NAMES="libomp" \
-DOpenMP_CXX_LIB_NAMES="libomp" \
-DOpenMP_libomp_LIBRARY="/opt/local/lib/libomp.dylib" \
-DOpenMP_CXX_FLAGS="-Xpreprocessor -fopenmp /opt/local/lib/libomp.dylib -I/opt/local/include" \
-DOpenMP_CXX_LIB_NAMES="libomp" \
-DOpenMP_C_FLAGS="-Xpreprocessor -fopenmp /opt/local/lib/libomp.dylib -I/opt/local/include"
Run Code Online (Sandbox Code Playgroud)

缺少的两个CMakeLists.txt位于 git submodules 内src/ 要下载子模块,cd到根phaedle目录并发出以下命令:

git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)

编辑:现在已修复此问题master