【发布时间】:2018-02-15 11:56:10
【问题描述】:
我将 CMake 用于我的一个涉及 CUDA 的项目。最近我不得不打开我的一些 CUDA 代码的“可分离编译”:
set(CUDA_SEPARABLE_COMPILATION ON)
但是,构建开始失败。例如,会发生以下情况:
/usr/local/cuda/bin/nvcc -gencode arch=compute_30,code=compute_30 --std=c++11 \
-Xcompiler -Wall -O3 -DNDEBUG "" "" "" "" -m64 -ccbin /usr/bin/cc \
-dlink /some/where/generated_foo.cu.o -o /some/where/foo_intermediate_link.o
nvcc fatal : Don't know what to do with ''
(为了便于阅读,换行并缩短名称)
所以,问题是某些东西会触发 CMake 向命令行添加一些空(带引号的)字符串,这是 nvcc 不喜欢的。除此之外,该命令似乎很好。
现在,-O3 -DNDEBUG 是我发布版本的 nvcc 编译标志。但我肯定没有在任何地方添加任何空字符串标志。我尝试研究 FindCUDA 如何构造 nvcc 调用,但无法完全弄清楚这些空字符串的来源。
如果不详细说明我的CMakeLists.txt,这可能是 CMake 的 FindaCUDA 模块的一个众所周知的问题,它有一个通用的解决方法?
注意:我使用 GNU/Linux Mint 18.3、CMake 3.5 和 CUDA 9.1。
【问题讨论】:
标签: cmake cuda nvcc compiler-flags