MacOS, CMake y OpenMP

Estoy usando el nuevo CMake (3.9.3) de Homebrew junto con LLVM 5.0.0 también de Brew, porque Clang aquí tiene soporte para OpenMP.

Esto funcionó en CMake 3.8.2 con LLVM 5.

En miCMakeLists.txt yo tengo

find_package( OpenMP )

y luego quiero hacer

if( OpenMP_CXX_FOUND )

Sin embargo, CMake no parece darse cuenta delfind_package directiva.

Corro CMake con

cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DUSE_WERROR=ON

donde he comprobado esoclang yclang++ apunta correctamente a/usr/local/opt/llvm/bin/clang y/usr/local/opt/llvm/bin/clang++

Todo lo que obtengo son estas dos líneas:

-- Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES) (found version "1.0")
-- Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES) (found version "1.0")

Si pongoOpenMP_C_FLAGS yo mismo (con-DOpenMP_C_FLAGS=-fopenmp=libomp) cambia el error a

-- Could NOT find OpenMP_C (missing: OpenMP_C_LIB_NAMES) (found version "3.1")

Tenga en cuenta que cambia el número de versión, por lo que debe encontrar algo, ¿verdad?

¿Qué me falta para que esto funcione correctamente?

Ok, parece que dentro delFindOpenMP.cmake suministrado por CMake hacemos untry_compile, que falla en silencio (porque lo hacemos muchas veces y la mayoría de ellos fallará, esto tiene sentido). Sin embargo, con Clang a-Werror se proporciona el indicador, que falla debido a un argumento de línea de comando no utilizado. Por lo tanto, puedo agregar:

if(APPLE)
    if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
        set(OpenMP_C_FLAG "-fopenmp=libomp -Wno-unused-command-line-argument")
    endif()
    if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
        set(OpenMP_CXX_FLAG "-fopenmp=libomp -Wno-unused-command-line-argument")
    endif()
endif()

a mi proyecto porque sé que-fopenmp=libomp funcionará para este Clang.

¿Es esta la forma correcta de hacerlo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta