MacOS和CMake的包含omp.h库出现错误

时间:2020-02-27 15:26:30

标签: macos cmake clion

我试图将omp.h库包含到我的项目中,但是在寻找了几个答案之后,我仍然没有成功。 我必须警告我是CMake的新手。

使用此answer,我创建了以下CMakeLists.txt:

cmake_minimum_required(VERSION 3.15)
project(BRKGA_FF_Best)

set(CMAKE_CXX_STANDARD 14)

include_directories(.)

if(APPLE)
  set(CMAKE_C_COMPILER clang)
  set(CMAKE_CXX_COMPILER clang++)

  if(CMAKE_C_COMPILER_ID MATCHES "Clang\$")
    set(OpenMP_C_FLAGS "-Xpreprocessor -fopenmp")
    set(OpenMP_C_LIB_NAMES "omp")
    set(OpenMP_omp_LIBRARY omp)
  endif()

  if(CMAKE_CXX_COMPILER_ID MATCHES "Clang\$")
    set(OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp")
    set(OpenMP_CXX_LIB_NAMES "omp")
    set(OpenMP_omp_LIBRARY omp)
  endif()
endif()

add_executable(BRKGA_FF_Best
    BRKGA.h
    main.cpp
    MTRand.h
    Population.h
    SampleDecoder.cpp
    SampleDecoder.h
    Structures.h
    Utility.cpp
    Utility.h JJSampleDecoder.h JJSampleDecoder.cpp JJmain.cpp)

target_link_libraries(BRKGA_FF_Best PRIVATE OpenMP::OpenMP_CXX)

但这会产生错误fatal error: 'omp.h' file not found

然后,我受此answer和此answer的启发创建了一个新文件:

cmake_minimum_required(VERSION 3.15)
project(BRKGA_FF_Best)

set(CMAKE_CXX_STANDARD 14)

include_directories(.)

find_package(OpenMP REQUIRED)
set(OpenMP_C_FLAGS "-Xpreprocessor -fopenmp")
set(OpenMP_C_LIB_NAMES "omp")
set(OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp")
set(OpenMP_CXX_LIB_NAMES "omp")

add_executable(BRKGA_FF_Best
BRKGA.h
main.cpp
MTRand.h
Population.h
SampleDecoder.cpp
SampleDecoder.h
Structures.h
Utility.cpp
Utility.h JJSampleDecoder.h JJSampleDecoder.cpp JJmain.cpp)

target_link_libraries(BRKGA_FF_Best PRIVATE OpenMP::OpenMP_CXX)

上面的文件生成错误并显示以下消息:

CMake Error at /Applications/CLion.app/Contents/bin/cmake/mac/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES)
Call Stack (most recent call first):
  /Applications/CLion.app/Contents/bin/cmake/mac/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  /Applications/CLion.app/Contents/bin/cmake/mac/share/cmake-3.15/Modules/FindOpenMP.cmake:477 (find_package_handle_standard_args)
  CMakeLists.txt:25 (find_package)

有人可以帮助我解决这个问题吗?预先感谢。

编辑:

正如@squareskittles所指出的,我更正了set()的位置,但是现在又出现了另一个错误。新的CMakeLists.txt是:

cmake_minimum_required(VERSION 3.15)
project(BRKGA_FF_Best)

set(CMAKE_CXX_STANDARD 14)

include_directories(.)

set(OpenMP_C_FLAGS "-Xpreprocessor -fopenmp")
set(OpenMP_C_LIB_NAMES "omp")
set(OpenMP_CXX_FLAGS "-Xpreprocessor -fopenmp")
set(OpenMP_CXX_LIB_NAMES "omp")
find_package(OpenMP REQUIRED)

add_executable(BRKGA_FF_Best
BRKGA.h
main.cpp
MTRand.h
Population.h
SampleDecoder.cpp
SampleDecoder.h
Structures.h
Utility.cpp
Utility.h JJSampleDecoder.h JJSampleDecoder.cpp JJmain.cpp)

target_link_libraries(BRKGA_FF_Best PRIVATE OpenMP::OpenMP_CXX)

现在新的错误是:

CMake Error at /Applications/CLion.app/Contents/bin/cmake/mac/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
  Could NOT find OpenMP_C (missing: OpenMP_omp_LIBRARY)
Call Stack (most recent call first):
  /Applications/CLion.app/Contents/bin/cmake/mac/share/cmake-3.15/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
  /Applications/CLion.app/Contents/bin/cmake/mac/share/cmake-3.15/Modules/FindOpenMP.cmake:477 (find_package_handle_standard_args)
  CMakeLists.txt:12 (find_package)

0 个答案:

没有答案