2015-12-11 26 views
6

Ich verwende OpenMP, um parallelen Code zu schreiben. Hier ist ein Abschnitt von den CMakeLists in meinem Fall.Cmake funktioniert nicht mit OpenMP auf Maverick

FIND_PACKAGE(OpenMP REQUIRED) 
    if(OPENMP_FOUND) 
    message("OPENMP FOUND") 
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 
    set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") 
    endif() 

Aber wenn wir cmake .. beginnen, scheint es, dass es nicht OpenMP Paket DEOS finden, und ich bekomme diese Fehlermeldung

Try OpenMP C flag = [ ] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-fopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [/openmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-Qopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-openmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-xopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [+Oopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-qsmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP C flag = [-mp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [ ] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-fopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [/openmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-Qopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-openmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-xopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [+Oopenmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-qsmp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- Try OpenMP CXX flag = [-mp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
CMake Error at /opt/local/share/cmake-3.3/Modules/FindPackageHandleStandardArgs.cmake:148 (message): 
    Could NOT find OpenMP (missing: OpenMP_C_FLAGS OpenMP_CXX_FLAGS) 

Hier ist CMakeLists.txt

cmake_minimum_required(VERSION 2.6) 

#Declaration du projet 

project(MYfirstcamke) 

set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE}) 

#Inclusion de opencv 

include_directories(/usr/local/include/) 

link_directories(/usr/local/lib) 

FIND_PACKAGE(OpenMP REQUIRED) 
if(OPENMP_FOUND) 
message("OPENMP FOUND") 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") 
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}") 
endif() 

find_package(PCL 1.2 REQUIRED) 
include_directories(${PCL_INCLUDE_DIRS}) 
link_directories(${PCL_LIBRARY_DIRS}) 
add_definitions(${PCL_DEFINITIONS}) 

file(

    GLOB_RECURSE 

    source_files 

    src/* 


) 
#declaration de l'executable 

add_executable(

my_executable 

${source_files} 

) 
#Configuration de l'edition de lien. 
target_link_libraries(

my_executable opencv_core opencv_imgproc opencv_video opencv_highgui ${PCL_LIBRARIES} 


) 

Wie kann ich das reparieren? Ich bin sicher, dass openMPi installiert ist und es auf opt/local/include

+2

Sind Sie sicher, dass Sie OpenMP und OpenMPI nicht verwechseln? Ich sehe, dass Sie beide Tags verwendet haben, und dass Sie am Ende des Posts auf OpenMPI verweisen. Aber beide sind völlig verschieden. OpenMP ist ein Standard der multi-threaded Parallel Language Extension und OpenMPI ist eine Implementierung des MPI-Standards für die Nachrichtenübergabe. Auf welche von beiden wartest du? – Gilles

+0

OpenMP ist kein Paket, sondern ein integraler Bestandteil des Compilers. Xcode hat vor langer Zeit einen OpenMP-fähigen GCC bereitgestellt. Dann wechselte Apple zu Clang, das keine OpenMP-Unterstützung hat, zumindest nicht in den mit Xcode ausgelieferten Versionen. Sie sollten GCC entweder von der Quelle installieren oder Homebrew/MacPorts/was auch immer verwenden. –

+0

@Gilles, kann ich zwischen OpenMP und OpenMPI mischen. Ich dachte, dass OpenMP veraltet war und OpenMP wurde. – Jeanne

Antwort

0

OpenMP und MPI sind zwei völlig verschiedene Dinge.

OMP erfordert Compiler-Unterstützung, die unter OS X benötigen Sie über Homebrew. (Sie können MPI auch über Homebrew installieren, was nett ist).

brew install clang-omp 

Nachdem Sie Klirren-omp installiert haben, können Sie dann CMake sagen, dass Compiler zu verwenden, indem es wie so aufrufen.

CC=clang-omp CXX=clang-omp++ cmake <insert your normal cmake parameters here> 
+0

Laut http://openmp.llvm.org/, > "Mit der Veröffentlichung von Clang 3.8.0 ist die OpenMP 3.1-Unterstützung standardmäßig in Clang aktiviert und die OpenMP-Laufzeitumgebung wird daher als normaler Teil des Clang-Systems erstellt build " Ich konnte einfach nicht verstehen, warum ich noch" clang-omp "installieren muss, könntest du bitte erklären warum? Ein weiteres Problem ist, dass die 'clang-omp'-Formel nach einer anderen Version von clang (und' compiler-rt' usw.) aus der 'llvm'-Formel fragt. Was also sollte ich tun, um die Dinge richtig zu machen? – squid

+0

Ich versuche mit CMake 3.7 und clang 4.0 und meine 'find_package (OpenMP Required)' scheitert. –

0

Zusätzlich zu der obigen Antwort können Sie auch gcc-5/g ++ - 5 von homebrew installieren. Die einfache gcc-5-Installation (ohne Clang-Wrapper) unterstützt OpenMP und dies sollte von CMake über Find_Package erkannt werden.