2016-06-22 144 views
6

我有一個問題,使用cmake來建立一個簡單的openMP代碼。鏗鏘,openMP和CMake

我已經安裝鐺-OMP,我可以用clang-omp -fopenmp filename.c

我已經嘗試了很多製作的CMakeLists.txt文件,無果編譯程序! 在文件我已經包括:

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() 

我都嘗試告訴CMake的調用

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

,並沒有使用該編譯器。

兩種情況下的結果如下

-- Try OpenMP C flag = [-fopenmp=libomp] 
-- Performing Test OpenMP_FLAG_DETECTED 
-- Performing Test OpenMP_FLAG_DETECTED - Failed 
-- 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 = [-fopenmp=libomp] 
-- 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 /Applications/CMake.app/Contents/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message): 
    Could NOT find OpenMP (missing: OpenMP_C_FLAGS OpenMP_CXX_FLAGS) 
Call Stack (most recent call first): 
    /Applications/CMake.app/Contents/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE) 
    /Applications/CMake.app/Contents/share/cmake-3.5/Modules/FindOpenMP.cmake:234 (find_package_handle_standard_args) 
    CMakeLists.txt:4 (FIND_PACKAGE) 
+0

你確定CMake從環境變量中獲取編譯器嗎?根據[FAQ](https://cmake.org/Wiki/CMake_FAQ#How_do_I_use_a_different_compiler.3F),這樣的編譯器設置並不總是有效。 – Tsyvarev

+0

'cmake -DCMAKE_CXX_COMPILER = clang-omp ++ -DCMAKE_C_COMPILE = clang-omp'如何? – arrowd

+0

你是如何安裝clang的,哪個版本?在最近的時候,openmp的支持比以前更精簡,而且還有很多需要擔心的地方。話雖如此,與GCC不同,您需要安裝openmp運行時庫。檢查你的包管理器。 – youngmit

回答

0

問題與添加非系統鐺(對我來說,LLVM 4.0)是你必須添加包括和lib目錄。 llvm-config在我的情況下正確地選擇它們,但CMake沒有使用它們。

假設你PATH是好的,並且已經設置CCCXX已經,您需要添加:

export C_INCLUDE_PATH=$(llvm-config --includedir) 
export CPLUS_INCLUDE_PATH=$(llvm-config --includedir) 
export LIBRARY_PATH=$(llvm-config --libdir) 

如果你喜歡LMOD,這.lua文件應該這樣做:

help([[ 
This is the module file for the llvm and clang compiler. 
]]) 

local version = "4.0" 

whatis("Name: LLVM") 
whatis("Version: " .. version) 
whatis("Keywords: System, Compiler") 
whatis("URL: http://www.llvm.org/") 
whatis("Description: LLVM compiler family") 

family("compiler") 

local prefix = "/work/llvm" 

prepend_path("PATH", pathJoin(prefix, "bin")) 
setenv("CC", pathJoin(prefix, "bin/clang")) 
setenv("CXX", pathJoin(prefix, "bin/clang++")) 
setenv("C_INCLUDE_PATH", pathJoin(prefix, "include")) 
setenv("CPLUS_INCLUDE_PATH", pathJoin(prefix, "include")) 
setenv("LIBRARY_PATH", pathJoin(prefix, "lib")) 
prepend_path("DYLD_LIBRARY_PATH", pathJoin(prefix, "lib")) 

(這適用於Mac,對於Linux將DYLD更改爲LD

這項工作與CMake很好,它拿起-fopenmp。手工編譯也只需要一個標誌。