如何编辑 Visual Studio CUDA nvcc.exe 命令行
Posted
技术标签:
【中文标题】如何编辑 Visual Studio CUDA nvcc.exe 命令行【英文标题】:How to edit Visual Studio CUDA nvcc.exe Command Line 【发布时间】:2019-03-18 18:31:33 【问题描述】:我需要编辑 NVidia CUDA 编译器 nvcc.exe 构建步骤的 Visual Studio 命令行,但是无法编辑。
我确定有人问过这个问题,但它很棘手,因为如果我使用“命令行”搜索任何内容,它会返回数百篇关于如何仅使用外部命令行编译的文章,而不是来自 VS 内部。
NVidia CUDA *.cu 文件对于编译和链接步骤都有不同的命令行,如果我转到我的 Visual Studio 项目属性、配置属性、CUDA C/C++、命令行,都无法编辑。
我在 NVidia 工具包文件夹中搜索了一些命令行文本,发现了这个。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\extras\visual_studio_integration\MSBuildExtensions\CUDA 10.1.props
此文件似乎定义了构建步骤,但如果我对其进行编辑并重新启动 Visual Studio,则没有任何变化。它似乎只在 CUDA 安装期间使用过。我尝试打开各种 VS 文件,例如 project.user,但 nvcc 命令行未在解决方案文件中的任何位置定义。此外,更改启动项目定义也没有什么好处,因为我需要能够将 CUDA GPU 处理添加到我现有的项目中。
你们中的任何一位 Visual Studio 大师都能够为第三方编译器编辑命令行吗?如果可以,怎么做?非常感谢!
【问题讨论】:
【参考方案1】:您只需像在 Visual Studio 中使用任何其他构建工具一样编辑它:通过编辑属性。项目属性中的命令行类别实际上只是为了根据您设置的属性向您显示命令的外观。拥有属性的全部意义在于您只需设置属性并让 IDE 将这些属性转换为特定工具的正确命令行,而不是直接指定命令行……
构建自定义的.props
文件设置默认属性以用于与该构建自定义关联的项目类型。实际使用的应该安装在 MSBuild 目录中,例如,C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\BuildCustomizations
。我建议不要直接编辑该文件,因为它设置了系统全局默认值。如果您想更改项目的默认值,只需编辑项目的 CUDA C/C++ 属性(即,在解决方案资源管理器中选择项目并编辑其属性,而不是单个 .cu 文件的属性)。
Visual Studio 中的属性是分层构建的(严格来说,我们在这里讨论的是项目元数据而不是属性,但这是一个小技术问题,在这里应该无关紧要)。在底部,您拥有项目为其所有构建工具导入的默认属性定义。除此之外,您还拥有项目范围的属性定义。并且项目中的每个项目(文件)都可以在其上拥有自己的属性定义。每个项目的属性集是为该项目类型定义的所有属性(例如,CUDA C/C++ 文件)以及任何项目特定定义的组合,其中最后一个定义会覆盖以前的定义。当您在 Visual Studio 属性对话框中看到以粗体呈现的属性时,这意味着该特定属性值在该级别被覆盖。非粗体属性是从下面的层继承的。因此,例如,项目属性中的粗体属性意味着设置被覆盖在来自构建集成的默认属性之上。项目级别的粗体属性意味着该项目的属性被覆盖在项目范围的属性之上。进一步的定制是可能的,例如,通过定义您自己的属性表,这允许您添加您自己的属性定义层。属性表也是可以导入多个项目的独立文件,例如,共享通用设置。只需打开属性管理器(查看 > 属性管理器)即可查看当前项目中的所有单个属性表,例如,添加您自己的……
【讨论】:
非常感谢您的回复。这很有意义。我更详细地检查了 nvcc 命令行,每个参数确实是属性页中其他地方可访问的可编辑属性的函数。【参考方案2】:我在解决我自己的问题后在这里发布了一个答案,所以如果其他人有同样的问题,他们将能够在这里找到一个简单的解决方案。
正如您在上面看到的,nvcc.exe 编译器命令行不可编辑,因为它只是各种其他可编辑属性的函数。
但是,我想首先编辑 nvcc 命令行的全部原因是因为以下编译器错误:
1>nvcc 致命:指定输出文件时,非链接阶段需要单个输入文件
NVidia CUDA nvcc.exe 编译器在我的 Visual Studio Debug 版本中正常工作,但对于任何 Release 版本每次都失败并出现上述错误。
我预计要解决这个问题,我必须编辑 nvcc.exe 命令行,但事实并非如此,原因如下。
当我删除 Visual Studio 配置构建名称中的所有空格时,问题完全消失了!
显然 nvcc.exe 编译器无法处理配置构建名称中的空格,尽管在所有命令行引用中都使用了双引号。因此,这个问题可能是 nvcc 编译器内部的问题,并且 NVidia 从未发现这仅仅是因为大多数人足够聪明,不会在构建名称中使用空格。
最重要的是,不要在 VS 配置构建名称中使用空格,并且 NVidia CUDA 编译器不会出现此问题。
【讨论】:
以上是关于如何编辑 Visual Studio CUDA nvcc.exe 命令行的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2008 中启动新的 CUDA 项目?
如何在 Visual Studio 中将 common/inc 文件夹添加到 CUDA 项目?
如何在 Windows 上的 Visual Studio 中编写 CUDA 并将其部署到 Linux?
基于Visual Studio 2015的CUDA编程:基本配置