C++ 代码解析不适用于CUDA、Clion和CMake
我有一个分为模块的项目,下面是一个虚拟示例:C++ 代码解析不适用于CUDA、Clion和CMake,c++,cmake,cuda,clion,C++,Cmake,Cuda,Clion,我有一个分为模块的项目,下面是一个虚拟示例: 根 CMakeLists.txt 模块 乌提尔斯 CMakeLists.txt src util_file.cpp 库达 CMakeLists.txt src cuda_file.cu 如果我用CLion编辑cuda_file.cu,所有符号都无法通过CLion解析(甚至包括标准库中的符号)所有代码完成/创建功能当然都会消失(除其他外)。问题似乎是,每当你创建一个只包含CUDA文件的库或可执行文件时,Clion就会变得愚蠢
- 根
- CMakeLists.txt
- 模块
- 乌提尔斯
- CMakeLists.txt
- src
- util_file.cpp
- 库达
- CMakeLists.txt
- src
- cuda_file.cu
- 乌提尔斯
- 将空的.cpp文件添加到目录中,并将其添加到add_library()CMake行李>
- 切换到另一个具有.cpp文件的库或可执行目标(如我的虚拟示例中的UTIL)。但是,当您想要编译或执行时,您必须再次切换到cuda目标(或某些子目标,如测试单元的test_cuda),然后再次切换回继续编码或调试,等等
cmake_minimum_required(VERSION 3.5)
message(STATUS "Configuring module cuda")
# Build module static library
FILE(GLOB CUDA_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp)
FILE(GLOB CUDA_CU_SRCS
${CMAKE_CURRENT_SOURCE_DIR}/src/*.cu)
FILE(GLOB CUDA_CU_HDRS
${CMAKE_CURRENT_SOURCE_DIR}/include/*.cuh)
cuda_compile(cuda_objs ${CUDA_CU_SRCS} ${CUDA_CU_HDRS})
add_library(cuda STATIC ${CUDA_SRCS} ${cuda_objs})
# because only .cu files, help cmake detect C++ language
set_target_properties(cuda PROPERTIES LINKER_LANGUAGE CXX)
在解析到其他头文件和库的链接时,有没有办法避免CLion derping
我已经在CLion选项中添加了.cu和.cuh文件作为C/C++代码,并尝试使用JETBRAINS\u IDE define选项,正如另一篇类似文章中所解释的,但这两个问题并不相同似乎没有JETBRAINS的干预来添加官方CUDA支持,我能从CLion+CMake+CUDA组合中获得的最大收获是:
- 在cuda源目录中添加一个空的dummy.cpp文件,如果它只由.cu文件填充(我的问题中的一个“脏”黑客)。我找不到更好的了。这允许Clion不完全derp。一件简单的事情,比如识别cstdio,如果没有这个“黑客”就无法工作,而CLion基本上是一个增强的记事本
- 尽可能使用正式支持CUDA作为语言的CMake 3.8+,并使用新的“CUDA感知”add_library()而不是旧的宏定义的CUDA_add_library()。这可以避免将来出现弃用问题
- 在cuda模块的CMakeLists(或主CMakeLists,如果只有一个),包括cuda的include目录的路径,以允许Clion“查看”cuda头。然后,CLion可以建议您包含它们,以便CLion正确解析CUDAAPI调用,如cudamaloc()或cudaFree()。这仅适用于CLion,因为CUDA编译器不需要正确编译(CUDA.h,CUDA_runtime.h,…)
- 使用此选项可以创建“clion helper”头文件,这样它就不会对诸如“设备”或“全局”之类的符号进行derp
这里是英伟达博客的链接,上面有CuAd官方CUDA语言支持和新的“CUDA意识”AddiLabar():
< P>克利永的2020.1版,CUDA项目现在正式支持我在添加到CLion的.cu type的末尾用粗体指定了可能的重复项。此外,特殊的CUDA符号(主机)也不是问题。您阅读了所有的答案吗?其他人明确表示,除非添加预处理器技巧,否则Clion无法解析cuda。我不希望Clion正确解析或理解cuda特殊符号或内核,我只希望他进行标准代码解析,这样整个文件就不会是红色的(与只有cuda符号是红色的不同)。出于某种原因,在CMake编译过程中添加一个空的CPP文件,使他能够正确地解决所有问题……为了确保这一点,我还尝试使用#define JETBRAINS_IDE选项,但正如我所说的,这是另一个问题,因为它没有改变任何东西