cmake,gcc,cuda和-m32

时间:2010-04-11 15:20:54

标签: macos cmake cuda

我发现CUDA在我的Mac上无法在64位模式下工作(或者到目前为止无法运行)。因此我决定编译32bit的所有内容。

我使用cmake 2.8并添加了以下选项

add_definitions(-Wall -m32)
set(CUDA_64_BIT_DEVICE_CODE OFF)
set(CMAKE_MODULE_LINKER_FLAGS -m32)

然而,当它尝试链接它时,它会执行以下操作:

/usr/bin/c++    -mmacosx-version-min=10.6 -Wl,-search_paths_first -headerpad_max_install_names  CMakeFiles/SimpleTestsCUDA.dir/BlockMatrix.cpp.o CMakeFiles/SimpleTestsCUDA.dir/Matrix.cpp.o ./SimpleTestsCUDA_generated_SimpleTests.cu.o ./SimpleTestsCUDA_generated_BlockMatrix.cu.o  -o SimpleTestsCUDA  /usr/local/cuda/lib/libcudart.dylib /usr/local/cuda/lib/libcuda.dylib 

哪个失败了很多“文件不是必需的架构”警告来自ld。现在,如果我手动将-m32添加到上面的命令,它就可以了。但是我不知道如何教cmake将-m32添加到每个gcc(或ld)调用。到目前为止,它适用于nvcc和gcc,但不适用于链接..

3 个答案:

答案 0 :(得分:3)

见上文

set(CMAKE_C_FLAGS -m32)
set(CMAKE_CXX_FLAGS -m32)

答案 1 :(得分:2)

如果在项目上运行cmake之前设置了env var LDFLAGS,它也会起作用:

export LDFLAGS=-m32
cmake ../source

答案 2 :(得分:1)

另一种解决方案可能是:

if (Apple)
  set (CMAKE_OSX_ARCHITECTURES i386)
  set (CUDA_64_BIT_DEVICE_CODE OFF) 
endif (Apple)

希望这有帮助。