为什么CMake强制使用libcublas进行可分离编译?

为什么CMake强制使用libcublas进行可分离编译?,cmake,cuda,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) int main() { } dummy.cu: cmake_minimum_required(VERSION 3.1) fi

我使用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)
int main() { }
dummy.cu

cmake_minimum_required(VERSION 3.1)
find_package(CUDA 7.0 REQUIRED)
set(CUDA_SEPARABLE_COMPILATION ON)
cuda_add_executable(dummy 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进行链接

注意:如果删除可分离_编译行,则不会将cublas添加到dlink命令参数中。

部分答案:

如果我们使用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)