为什么CMake强制使用libcublas和可分离的编译?

时间:2018-05-29 11:26:24

标签: cmake cuda

我使用CMake 3.11构建以下基于CUDA的小项目:

CMakeLists.txt

cmake_minimum_required(VERSION 3.1)
find_package(CUDA 7.0 REQUIRED)
set(CUDA_SEPARABLE_COMPILATION ON)
cuda_add_executable(dummy dummy.cu)

dummy.cu

int main() { }

奇怪的是,在构建时,以下命令用于dlink阶段:

/path/to/cuda/bin/nvcc -m64 -ccbin /opt/gcc-5.4.0/bin/gcc -dlink /home/joeuser/src/dummy/CMakeFiles/dummy.dir//./dummy_generated_dummy.cu.o /path/to/cuda/lib64/libcublas_device.a -o /home/joeuser/src/dummy/CMakeFiles/dummy.dir/./dummy_intermediate_link.o

为什么CMake与Cublas连接起来呢?据说它不需要呢?

注意:如果我删除了SEPARABLE_COMPILATION行,则不会将cublas添加到dlink命令参数中。

1 个答案:

答案 0 :(得分:1)

部分答案:

如果我们使用CMake的本机CUDA语言支持,例如

,似乎就不会发生这种情况
cmake_minimum_required(VERSION 3.1)
enable_language(CUDA)
add_executable(dummy dummy.cu)

而不是上述 - 工作。我不能让它有可分离的编译,即使我设置:

set_property(TARGET dummy PROPERTY CUDA_SEPARABLE_COMPILATION OFF)