我试图将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)