【发布时间】:2017-01-19 12:43:22
【问题描述】:
我正在尝试基于以下 documentation 使用 clang-3.9 构建一个 cuda 项目。但我想使用 cmake 来构建我的项目。我已经将 CMAKE_CC_COMPILER 和 CMAKE_CXX_COMPILER 分别设置为 clang 和 clang++。
但问题是,如果我使用
file(GLOB_RECURSE CUDA_SOURCES "./*.cu")
CUDA_ADD_LIBRARY(Benchmarks_CUDA ${CUDA_SOURCES})
在我的 CMakeList.txt 中,默认情况下 cmake 将使用 nvcc 编译器。但是我想使用 clang 来编译 .cu 文件。
如果我使用
add_library (Benchmarks_CUDA ${CUDA_SOURCES})
然后我会得到一个错误
CMake Error: Cannot determine link language for target "Benchmarks_CUDA".
CMake Error: CMake can not determine linker language for target: Benchmarks_CUDA
谁能告诉我如何使用 cmake 使用 clang 构建 .cu 文件。
【问题讨论】:
-
我承认我不知道 clang 可以用作 CUDA 编译器。首先,我建议添加文档建议的所有标志。其次,看看使用 project 命令设置语言是否有帮助。
-
@robertprevost:至少你现在理解了被问到的问题。不过,我会重复我的评论。这是由于 .cu 文件扩展名和默认构建命令中的 C++ 编译操作之间没有关联而导致的 cmake 错误消息。
-
好吧,我最后的建议是明确设置目标的链接器语言:set_target_properties(Benchmarks_CUDA PROPERTIES LINKER_LANGUAGE CXX)。
-
@JohnsPaul:我不相信有一种简单的方法可以做到这一点。 CMake 不像标准 make 那样支持自定义构建规则,因此您将不得不尝试制作自定义命令,这不是很简单。
-
@JohnsPaul 虽然 clang 编译了
.cu文件,但它不支持与 nvcc 相同的选项。它不会取代现有的构建系统。您不能依赖CUDA_ADD_LIBRARY自动按您的预期工作。您必须创建一个像CLANG_CUDA_ADD_LIBRARY这样的新函数,它使用适当的clang选项编译.cu文件。
标签: cmake clang llvm llvm-clang