获得带有本地CUDA支持的CMake的C ++目标中的CUDA包含目录?

ein*_*ica 5 c++ cuda cmake include-path

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

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

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

hav*_*ogt 9

可以从CMake变量中检索编译器使用的include目录CMAKE_CUDA_COMPILERCMAKE_CUDA_TOOLKIT_INCLUDE_DIRECTORIES

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

示例:cmake_minimum_required(版本3.9)项目(MyProject版本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}
)
Run Code Online (Sandbox Code Playgroud)

CMake Bug跟踪器还讨论了此问题:为cuda库提供目标库