首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取数据自动化系统包括在C++目标中使用本地数据自动化系统-支持CMake?

获取数据自动化系统包括在C++目标中使用本地数据自动化系统-支持CMake?
EN

Stack Overflow用户
提问于 2018-08-08 22:31:57
回答 2查看 11.2K关注 0票数 9

在CMake版本3.8中,引入了对CUDA作为一种语言的本地支持。当一个项目将数据自动化系统作为其语言之一时,CMake将着手定位数据自动化系统(例如,它定位nvcc二进制文件)。

只要你只编译数据自动化系统代码--这就足够了。但是,如果您想在该项目中编译一个C++目标,怎么办?数据自动化系统包含的不是自动的-I'ed,而且CMakeCache.txt似乎不包含任何地方的CUDA包含路径。

我是否真的必须运行一些find_package(CUDA 9.0 REQUIRED),即使CMake本身已经定位到了数据自动化系统?或者-我可以以其他方式获得包含目录吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-09 14:40:13

包含由CMAKE_CUDA_COMPILER设置的编译器所使用的目录,可以从CMake变量CMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES中检索它们。

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

示例:

代码语言:javascript
运行
复制
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 bug跟踪器:为cuda库提供目标库上也讨论了这个问题。

更新: CMake 3.17.0添加FindCUDAToolkit

与手工执行find_library()不同,CMake 3.17.0中最好的方法是使用CUDAToolkit模块。

代码语言:javascript
运行
复制
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模块文件。

票数 23
EN

Stack Overflow用户

发布于 2022-07-11 21:24:16

现在,使用CMake 3.18及更高版本,您可以通过检查find_package(CUDAToolkit)提供的目标来获得所需的大部分内容--即使CUDA已经找到了CUDA编译器,也确实需要这些目标。但实际上,您可能只依赖于其中一个目标,并且避免直接使用包含目录。

PS --如果您碰巧使用了cuda包装器 (例如通过find_package(cuda-api-wrappers)),它将为您处理依赖关系。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51756562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档