技术开发 频道

让Visual Studio支持CUDA代码折叠

        【IT168 技术】光把CUDA SDK中的usertype.dat文件复制到IDE目录下,只能让VS支持CUDA的关键字高亮显示;而VS好用的代码折叠却不能应用到CU文件上,真是让人气愤.于是我就翻翻注册表,发现了可以让VS支持CU文件代码折叠的方法:

  HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\[XXX]\Languages\Language Services\C/C++

  下,向"NCB Default C/C++ Extensions"项里追加.cu;即可,譬如".cpp;.cxx;.c;.cc;.h;.hh;.hxx;.hpp;.inl;.tlh;.cu;"

  注释:[XXX]是你的VS版本号.

  如此一来,重启VS即可开到CU文件也享用到代码折叠服务!

  再来说一下打印服务的问题,原本VS里面代开CU文件,可以看到打印按钮和菜单项是Disabled的,这可急煞人了,大家知道VS可以提供代码高亮和现实行号功能,这样打印出来的代码非常清晰工整,但是现在VS死活不让我们打印CU文件,不知道MS心里的什么.

  那么如何解决呢,其实VS的打印功能的启用/禁用是通过宏来实现的,我们打开宏管理器,编辑VSEditor模块里的IsPrintableFile函数,向其中添加.cu的支持,修改后的代码如下:

  Function IsPrintableFile(ByVal projItem As EnvDTE.ProjectItem) As Boolean

  Dim fileName As String

  Dim extensions As New System.Collections.Specialized.StringCollection

  ' 如果添加到项目的文件属于可以打印的类型,

  ' 则将该文件类型的扩展名添加到以下列表:

  Dim exts As String() = {".cpp", ".c", ".h", ".cu", ".idl", ".def", ".rgs", ".rc", ".cs", ".vb", ".xml", ".txt", ".jsl"}

  extensions.AddRange(exts)

  fileName
= projItem.FileNames(1)

  Return extensions.Contains(System.IO.Path.GetExtension(fileName).ToLower())

  End Function

  然后重新打开CU文件,你就会发现VS已经让你打印它了.

  这里说明一下,还有几个宏函数没有提供对CUDA的支持,您可以参考下面的代码一并给他改了:

  Utilities模块:

  ''

  '' 此模块和其他模块的 Helper 函数。

  ''

  Function LineOrientedCommentStart(Optional ByVal document As Document = Nothing) As String

  Dim extension As String

  If (document Is Nothing) Then

  document
= DTE.ActiveDocument

  End If

  extension
= document.Name

  If (extension.EndsWith(
".cs") Or extension.EndsWith(".cpp") Or extension.EndsWith(".cu") Or extension.EndsWith(".h") Or extension.EndsWith(".idl") Or extension.EndsWith(".jsl")) Then

  Return
"//"

  ElseIf (extension.EndsWith(
".vb")) Then

  Return
"'"

  Else

  Throw New Exception(
"Unrecognized file type. You can add this file type by modifying the function Utilities.LineOrientedCommentStart to include the extension of this file.")

  End If

  End Function

  DevStudio6Editor模块

  Function FileType(ByVal doc As EnvDTE.Document) As Integer

  ' 如果要确定源文件的类型,此例程有多种

  ' 用途。

  ' 返回值: 0 文件类型未知

  ' 1 与 C 相关的文件,包括 .c、.cpp、.cxx、.h、.hpp 和 .hxx

  ' 2 与 Java 相关的文件,包括 .jav 和 .java

  ' 3 ODL 样式的文件,包括 .odl 和 .idl

  ' 4 资源文件,包括 .rc 和 .rc2

  ' 5 HTML 样式的文件,包括 .html 和 .htm

  ' 6 VBS 样式的文件: .dsm

  ' 7 Def 样式的文件: .def

  ' 用途: 向此函数传递要获取其信息的文档。

  Dim pos As Integer

  Dim ext As String

  ext
= doc.Name

  FileType
= 0

  pos
= InStr(ext, ".")

  If pos
> 0 Then

  Do While pos
<> 1

  ext
= Mid(ext, pos, Len(ext) - pos + 1)

  pos
= InStr(ext, ".")

  Loop

  ext
= LCase(ext)

  End If

  If ext
= ".rc" Or ext = ".rc2" Then

  FileType
= 4

  ElseIf doc.Language
= EnvDTE.Constants.dsCPP Then

  FileType
= 1

  ElseIf ext
= ".cu" Then

  FileType
= 1

  ElseIf doc.Language
= EnvDTE.Constants.dsJava Then

  FileType
= 2

  ElseIf doc.Language
= EnvDTE.Constants.dsIDL Then

  FileType
= 3

  ElseIf doc.Language
= EnvDTE.Constants.dsHTML_IE3 Then

  FileType
= 5

  ElseIf ext
= ".xml" Then

  FileType
= 5

  ElseIf doc.Language
= EnvDTE.Constants.dsHTML_RFC1866 Then

  FileType
= 5

  ElseIf doc.Language
= EnvDTE.Constants.dsVBSMacro Then '

  FileType
= 6

  ElseIf ext
= ".def" Then

  FileType
= 7

  Else

  FileType
= 0

  End If

  End Function

  最后说明一点,以上所有操作均是建立在您已经完整的对VS添加了CUDA支持的情况上,如果您的VS无法正常建立和编译CUDA工程的话,那么请先搜索如何对VS添加了CUDA支持的教程并按部就班的设置好您的VS.如果您不这样做,很可能导致我这篇修改教程里的部分设置不能很好的发挥作用。

        更多内容请点击:

        CUDA专区:http://cuda.it168.com/

        CUDA论坛:http://cudabbs.it168.com/

0
相关文章