missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES

11,808

Solution 1

I found a solution porposed in : http://stechschulte.net/2016/03/20/openmp-osx-cmake.html

The trick is that cmake must be run with the CC and CXX environment variables pointing to clang-omp:

CC=clang-omp CXX=clang-omp++ cmake

Note that clang-omp and clang-omp++ have to be defined after installing llvm via:

brew install llvm

and create two symlink:

ln -s /usr/local/opt/llvm/bin/clang /usr/local/bin/clang-omp
ln -s /usr/local/opt/llvm/bin/clang++ /usr/local/bin/clang-omp++

Solution 2

This is because the Xcode clang not support, use system clang instead.

method 1: set env variables, then run cmake https://gist.github.com/svenevs/f00ed3898d2af6248921b63254aa8cc1

export CC=/usr/local/opt/llvm/bin/clang
export CXX=/usr/local/opt/llvm/bin/clang++
export LDFLAGS="-L/usr/local/opt/llvm/lib"
export CPPFLAGS="-I/usr/local/opt/llvm/include"

method2: set env variables in CMakeLists.txt

message(STATUS "set env var")
set(ENV{CC} "/usr/local/opt/llvm/bin/clang")
set(ENV{CXX} "/usr/local/opt/llvm/bin/clang++")
set(ENV{LDFLAGS} "-L/usr/local/opt/llvm/lib")
set(ENV{CPPFLAGS} "-I/usr/local/opt/llvm/include")

method3: change var in CMakeLists.txt

message(STATUS "set compipler")
set(CMAKE_C_COMPILER "/usr/local/Cellar/llvm/5.0.1/bin/clang")
set(CMAKE_CXX_COMPILER "/usr/local/Cellar/llvm/5.0.1/bin/clang++")
set(OPENMP_LIBRARIES "/usr/local/Cellar/llvm/5.0.1/lib")
set(OPENMP_INCLUDES "/usr/local/Cellar/llvm/5.0.1/include")

set(OPENMP_LIBRARIES "/usr/local/opt/llvm/lib")
link_directories(${OPENMP_LIBRARIES})

method4. change env variable when run cmake

cmake .. -DCC=xxx -DCXX=xxx -DLDFLAGS="" -DCPPFLAGS=""

Solution 3

Find OpenMP

Despite the other answers so far, one can use the system compiler.

if(APPLE)
if(CMAKE_C_COMPILER_ID MATCHES "Clang")
    set(OpenMP_C "${CMAKE_C_COMPILER}" CACHE STRING "" FORCE)
    set(OpenMP_C_FLAGS "-fopenmp=libomp -Wno-unused-command-line-argument" CACHE STRING "" FORCE)
    set(OpenMP_C_LIB_NAMES "libomp" "libgomp" "libiomp5" CACHE STRING "" FORCE)
    set(OpenMP_libomp_LIBRARY ${OpenMP_C_LIB_NAMES} CACHE STRING "" FORCE)
    set(OpenMP_libgomp_LIBRARY ${OpenMP_C_LIB_NAMES} CACHE STRING "" FORCE)
    set(OpenMP_libiomp5_LIBRARY ${OpenMP_C_LIB_NAMES} CACHE STRING "" FORCE)
endif()
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
  set(OpenMP_CXX "${CMAKE_CXX_COMPILER}" CACHE STRING "" FORCE)
  set(OpenMP_CXX_FLAGS "-fopenmp=libomp -Wno-unused-command-line-argument" CACHE STRING "" FORCE)
  set(OpenMP_CXX_LIB_NAMES "libomp" "libgomp" "libiomp5" CACHE STRING "" FORCE)
  set(OpenMP_libomp_LIBRARY ${OpenMP_CXX_LIB_NAMES} CACHE STRING "" FORCE)
  set(OpenMP_libgomp_LIBRARY ${OpenMP_CXX_LIB_NAMES} CACHE STRING "" FORCE)
  set(OpenMP_libiomp5_LIBRARY ${OpenMP_CXX_LIB_NAMES} CACHE STRING "" FORCE)
endif()
endif()
Share:
11,808
yankee
Author by

yankee

Updated on June 30, 2022

Comments

  • yankee
    yankee almost 2 years

    I'm struggling in compiling a project using OpenMP on Mac OSX. The error is:

    CMake Error at /usr/local/Cellar/cmake/3.10.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
    Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES)
    Call stack most recent call first) 
    /usr/local/Cellar/cmake/3.10.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
    /usr/local/Cellar/cmake/3.10.2/share/cmake/Modules/FindOpenMP.cmake:447 (find_package_handle_standard_args)
    libRORPO/CMakeLists.txt:7 (find_package)
    

    The CMakeLists file associated to the search of OpenMP in the project is the following:

    # RORPO Lib
    
    project(libRORPO)
    cmake_minimum_required(VERSION 2.8)
    
    # FIND OPENMP
    find_package( OpenMP REQUIRED)
    if(OPENMP_FOUND)
        set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
        set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} 
             ${OpenMP_EXE_LINKER_FLAGS}")
    endif()
    
    # ADD FILES
    file(GLOB_RECURSE RORPO_HEADERS *.hpp *.h)
    file(GLOB_RECURSE RORPO_SOURCES *.c)
    
    add_library(RORPO ${LIB_TYPE} ${RORPO_SOURCES} ${RORPO_HEADERS})
    
    install( FILES ${RORPO_HEADERS} DESTINATION include/libRORPO)
    install( TARGETS RORPO DESTINATION lib)
    

    I verified if the OpenMP installation runs well using either gcc-7 and Clang-omp. I've searched for similar bugs. Responses pointed that there is a recent package in cmake that allows the finding of OpenMp. I reinstalled CMAKE to have a recent version but it still doesn't work. I'm not expert in cmake configurations.., I would appreciate if you can guide me.

  • chb
    chb about 5 years
    Hi, welcome to Stack Overflow. When answering a question that already has many answers, please be sure to add some additional insight into why the response you're providing is substantive and not simply echoing what's already been vetted by the original poster. This is especially important in "code-only" answers such as the one you've provided.