gpt4 book ai didi

c++ - 使用原生 CUDA 支持 CMake 在 C++ 目标中获取 CUDA 包含目录?

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:37 24 4
gpt4 key购买 nike

在 CMake 3.8 版中,引入了对 CUDA 作为一种语言的原生支持。当一个项目将 CUDA 作为其语言之一时,CMake 将继续定位 CUDA(例如,它定位 nvcc 二进制文件)。

只要您只编译 CUDA 代码——这就足够了。但是,如果您想在该项目中编译 C++ 目标怎么办? CUDA 包含不是 -I 自动编辑的,CMakeCache.txt 似乎不包含任何地方的 CUDA 包含路径。

即使 CMake 本身已经找到 CUDA,我是否真的必须运行一些find_package(CUDA 9.0 REQUIRED)?或者 - 我可以通过其他方式获得包含目录吗?

最佳答案

CMAKE_CUDA_COMPILER 设置的编译器使用的 include 目录 可以从 CMake 变量 CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES 中检索。 .

要获取,最好的方法可能是结合使用find_library()CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES。 .

例子:

cmake_minimum_required(VERSION 3.9)
project(MyProject VERSION 1.0)
enable_language(CUDA)

find_library(CUDART_LIBRARY cudart ${CMAKE_CUDA_IMPLICIT_LINK_DIRECTORIES})

add_executable(
binary_linking_to_cudart
my_cpp_file_using_cudart.cpp
)
target_include_directories(
binary_linking_to_cudart
PRIVATE
${CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES}
)
target_link_libraries(
binary_linking_to_cudart
${CUDART_LIBRARY}
)

此问题也在 CMake 错误跟踪器上进行了讨论:Provide target libraries for cuda libraries .


更新:CMake 3.17.0 添加了 FindCUDAToolkit

从 CMake 3.17.0 开始,最好的方法是使用 CUDAToolkit 模块,而不是手动执行 find_library()

find_package(CUDAToolkit)
add_executable(
binary_linking_to_cudart
my_cpp_file_using_cudart.cpp
)
target_link_libraries(binary_linking_to_cudart PRIVATE CUDA::cudart)

为了支持早期的 CMake 版本,您可以在存储库中以最少的更改发送 CUDATookit 模块文件。

关于c++ - 使用原生 CUDA 支持 CMake 在 C++ 目标中获取 CUDA 包含目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51788855/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com