Visual Studio 2019中.cpp改.cu后未用nvcc编译的语法错误解决方法
解决CUDA项目中.cu文件被C++编译器编译的问题
不用重建项目,根据你使用的构建工具/IDE,按以下方法手动指定.cu文件的编译工具即可:
Visual Studio 环境
- 右键目标.cu文件 → 属性 → 配置属性 → 常规 → 项类型,将默认的「C/C编译器」改为「CUDA C/C」
- 若项目没有CUDA配置选项,需先添加CUDA工具集:右键项目 → 属性 → 常规 → 平台工具集,选择带CUDA标识的版本(比如
v143 (CUDA 12.3))
CMake 构建系统
- 在CMakeLists.txt中,为目标.cu文件指定CUDA语言属性:
# 启用CUDA语言(旧版CMake需添加) enable_language(CUDA) # 为指定.cu文件设置编译语言 set_source_files_properties(your_target_file.cu PROPERTIES LANGUAGE CUDA) # 旧版CMake也可直接用cuda_add_executable替代add_executable # cuda_add_executable(your_project main.cpp your_target_file.cu) - 清理CMake缓存后重新生成构建文件
Makefile 环境
- 手动修改Makefile,为.cu文件添加nvcc编译规则,替换原有C++编译规则:
# 示例:编译单个.cu文件为目标文件 your_file.o: your_file.cu kernel.cuh nvcc -c $< -o $@ -arch=sm_70 $(CUDA_INCLUDE_FLAGS) # 链接阶段确保链接CUDA运行时库 your_project: main.o your_file.o g++ $^ -o $@ -lcudart -L/usr/local/cuda/lib64
通用注意事项
- 修改文件扩展名后,部分构建工具不会自动刷新文件类型关联,必须手动配置
- 清理旧的构建缓存(比如VS的
Debug/Release目录、CMake的build文件夹)后再重新编译,避免缓存残留导致的问题
内容的提问来源于stack exchange,提问作者nasy
相关产品推荐
相关产品推荐

