2013-04-29 34 views
4

我尝试在我的Mac OSX 10.8.3上使用CMake编译一个简单的CUDA“Hello World”。CUDA 5.0,CMake和Make在OSX上失败10.8.3

调用cmake .似乎成功。这里是我的CMakeList.txt

project(HelloWorld) 
cmake_minimum_required(VERSION 2.8) 

FIND_PACKAGE(CUDA) 

CUDA_INCLUDE_DIRECTORIES(/Developer/NVIDIA/CUDA-5.0/samples/common/inc) 
CUDA_ADD_EXECUTABLE(helloWorld helloWorld.cu) 

...和输出:

-- The C compiler identification is Clang 4.2.0 
-- The CXX compiler identification is Clang 4.2.0 
-- Check for working C compiler: /usr/bin/cc 
-- Check for working C compiler: /usr/bin/cc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/c++ 
-- Check for working CXX compiler: /usr/bin/c++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- Found CUDA: /Developer/NVIDIA/CUDA-5.0 (found version "5.0") 
-- Configuring done 
-- Generating done 
-- Build files have been written to: /Users/mennny/Documents/UNI/6_Semester/0_PMPP/1_exercises/cuda-hello-world 

但调用make后失败,出现以下错误(S):

[100%] Building NVCC (Device) object CMakeFiles/helloWorld.dir//./helloWorld_generated_helloWorld.cu.o 
clang: error: unsupported option '-dumpspecs' 
clang: error: no input files 
CMake Error at helloWorld_generated_helloWorld.cu.o.cmake:206 (message): Error generating /Users/mennny/Documents/UNI/6_Semester/0_PMPP/1_exercises/cuda-hello-world/CMakeFiles/helloWorld.dir//./helloWorld_generated_helloWorld.cu.o 


make[2]: *** [CMakeFiles/helloWorld.dir/./helloWorld_generated_helloWorld.cu.o] Error 1 
make[1]: *** [CMakeFiles/helloWorld.dir/all] Error 2 
make: *** [all] Error 2 

我GOOGLE所示错误,但找不到任何足够的答案。 任何想法为什么make失败,但cmake成功。

感谢您的帮助。

回答

1

X Xcode中的默认C编译器在OS X Lion中更改为CLang。 CLang与nvcc不兼容,因此您需要更改nvcc用于非cuda(主机)代码的编译器。将以下代码添加到您的CMakeList.txt中:

if (NOT DEFINED CUDA_HOST_COMPILER AND CMAKE_C_COMPILER_ID STREQUAL "Clang" AND EXISTS /usr/bin/gcc) 
    set(CUDA_HOST_COMPILER /usr/bin/gcc CACHE FILEPATH "Host side compiler used by NVCC") 
    message(STATUS "Setting CMAKE_HOST_COMPILER to /usr/bin/gcc instead of ${CMAKE_C_COMPILER}.") 
endif() 

如果需要,调整路径到gcc。

+1

您的代码不适用于我。但是从技术上说''CUDA_HOST_COMPILER'设置为'/ usr/bin/gcc'是正确的答案。调用'cmake。 -DCUDA_HOST_COMPILER:FILEPATH =/usr/bin/gcc'与我显示的'CMakeList.txt'起作用。谢谢! – Mennny 2013-04-30 08:41:48

0

如果你不想改变你的CMakeLists.txt,它可以工作,如果你设置环境变量CXX为“gcc”(假设你的路径中没有任何其他GCC在/ usr /仓)。

CMake会自动提取它。