// 
//     Licensed to the Apache Software Foundation (ASF) under one
//     or more contributor license agreements.  See the NOTICE file
//     distributed with this work for additional information
//     regarding copyright ownership.  The ASF licenses this file
//     to you under the Apache License, Version 2.0 (the
//     "License"); you may not use this file except in compliance
//     with the License.  You may obtain a copy of the License at
// 
//       http://www.apache.org/licenses/LICENSE-2.0
// 
//     Unless required by applicable law or agreed to in writing,
//     software distributed under the License is distributed on an
//     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
//     KIND, either express or implied.  See the License for the
//     specific language governing permissions and limitations
//     under the License.
//

image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.3、7.4 和 8.0"]

= IDE 中的 C/C++ 远程开发模式
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: IDE 中的 C/C++ 远程开发模式 - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, IDE 中的 C/C++ 远程开发模式

2014 年 3 月 [修订版本号：V8.0-1]

本文介绍了在您安装了 C/C++ 模块时 NetBeans IDE 中可用的远程开发功能，以及如何选择在开发环境中使用这些功能的最佳方法。













== 什么是远程开发

远程开发是 NetBeans IDE 的一项功能，您可以使用该功能在运行 Microsoft Windows、Mac OS X、Oracle Solaris 或 Linux 的计算机上运行 IDE；以及在另一台运行 Oracle Solaris 或 Linux 的计算机上构建、运行和调试您的程序。


== 何时使用远程开发

如果符合以下某些情况，您可能需要使用远程开发：

* 桌面系统未运行 Oracle Solaris 或 Linux。

* 在有时遇到高负载的共享 Solaris 系统上运行 IDE。

* 出于安全原因，您对运行 Oracle Solaris 或 Linux 的系统的访问权限被限制到安全 Shell (SSH)。

* 难以在 Solaris 环境中运行图形用户界面工具。

* 您正在开发的软件必须在包含 Solaris 或 Linux 的多个平台上编译和运行。


== 远程开发工作方式

IDE 提供用于管理远程主机的功能。您可以将远程主机配置为用于构建、运行和调试 C、C++ 和 Fortran 项目。远程主机必须符合以下条件：

* 远程主机操作系统必须是 Oracle Solaris 或 Linux。

* 远程主机必须运行 SSH 守护程序 `sshd`。

* 必须可在远程主机上访问至少一个工具集合（GNU、Oracle Solaris Studio 或 Sun Studio）。

* 您必须拥有主机上的用户帐户。

可以在 IDE 的 "Services"（服务）窗口中管理远程主机。

image::images/services_window.png[]

配置远程主机并连接到该主机之后，您即可立即构建、运行和调试项目，就如您在本地系统上所做的一样。通过 SSH 执行远程 IDE 命令。

当您使用远程开发主机时，本地主机和远程主机都需要访问项目文件。这种访问可通过文件共享或安全复制文件来实现。在 IDE 可以在本地系统和远程系统之间使用文件共享之前，共享文件系统或文件夹必须进行设置且可由这两个系统访问。通过 SFTP 或运行主机的操作系统中提供的其他文件共享机制（例如，网络文件系统 (NFS)、Samba 或 WebDAV）访问远程文件。

如果无法进行文件共享，您可以使用自动复制将文件复制到使用 SSH 的服务器。


== 远程开发的优点

远程开发具有以下优点：

* 您可以将相同的开发环境用于所有项目。

* 桌面系统的资源得到更好利用。

* 网络通信已优化。

* IDE 响应时间缩短。

* 可以从 IDE 浏览远程文件系统。

* 可以在 IDE 中为远程主机打开终端窗口。

* 可以在仅 SSH 的安全环境中使用它。

 image::images/modes_diagram.png[]

在简单模式下，源文件主要位于本地主机上。构建项目时，会根据需要使用 SSH 文件传输协议 (SFTP) 将源文件传送到远程主机。

在混合或共享模式下，源文件位于使用 NFS、Samba、WebDAV 或其他文件共享系统在本地主机和远程主机之间共享的位置中。

在完全远程模式下，源文件位于远程主机上。IDE 使用 SFTP 访问这些文件。


== 确定要使用的远程开发模式

哪种开发模式最适合于您的特定情况取决于您所使用的开发环境。以下每一部分介绍了一种开发模式在其中具有最多优点的开发环境示例。


=== 简单模式

如果下图描述您的开发环境，则简单模式可能是最能满足您的需求的远程模式。

image::images/simple_mode_diagram.png[]

在此环境中，简单模式具有以下优点：

* 可以将相同的 IDE 用于本地和远程开发。

* 可以在 IDE 中轻松切换主机和平台。

* 可以在仅 SSH 环境中使用 IDE。

* 您的移动性得到改进。


=== 混合（共享）模式

如果您的开发环境类似于下图中显示的开发环境，则混合或共享模式可能是一个不错的选择。

image::images/mixed_mode_diagram.png[]

在此环境中使用混合模式的优点是：

* 可以在 IDE 中轻松切换主机和平台。

* 文件没有重复（高速缓存），这种情况会在其他两种模式中发生。

* 网络吞吐量将与文件共享机制（例如 NFS、Samba 或 WebDAV）可以提供的一样好。


=== 完整模式

如果您的开发环境类似于下图中显示的开发环境，则完整模式可能是最适合您的模式。

image::images/full_mode_diagram.png[]

在此环境中，使用完整远程模式的优点是：

* 从使用 X-window 转发或 VNC 迁移几乎是无缝的。

* IDE 响应时间缩短。

* 减少对开发主机资源的依赖。

* 开发主机上的负载变小，从而减少 Oracle Solaris 上的负载。

* 可以从远程二进制文件创建新的远程项目。


== 选择远程开发模式

使用的远程开发模式由远程构建主机的配置方式确定，但也由您在 IDE 中访问项目的方式确定。

对于每种模式，您必须首先配置远程构建主机，如 link:./remotedev-tutorial.html[+C/C++ 远程开发教程+]和 IDE 帮助中所述。

您可以在 IDE 中使用 "Host Properties"（主机属性）对话框为远程主机选择简单模式或混合模式，以指定在您使用主机时应如何访问项目文件。

打开 "Services"（服务）窗口，展开 "C/C++ Build Hosts"（C/C++ 构建主机）节点，右键单击远程主机并选择 "Properties"（属性）。

image::images/host_properties_dialog.png[]


=== 简单模式

对于简单模式，将 "Access project files via"（项目文件访问方式）设置为 "Automatic copying"（自动复制）。

您可以右键单击项目，选择 "Set Build Host"（设置构建主机），然后选择您已配置为通过自动复制访问项目文件的远程主机。然后，您使用的就是简单远程开发模式。构建项目时，会自动将项目文件复制到远程主机上的 NetBeans 用户目录。


=== 混合模式

对于混合模式，将 "Access project files via"（项目文件访问方式）设置为 "System level file sharing"（系统级别文件共享）。

您可以右键单击项目，选择 "Set Build Host"（设置构建主机），然后选择您已配置为通过系统级别文件共享访问项目文件的远程主机。然后，您使用的就是混合远程开发模式。构建项目时，项目文件的位置不变，因为可从本地主机和远程构建主机访问这些文件。


=== 完整远程模式

要在 IDE 中使用完整远程模式，请使用以下部分中描述的“远程开发”工具栏。


== 使用工具栏进行完整远程开发

在完整远程模式中，您可以通过本地主机上运行的 IDE 使用远程开发工具栏来处理位于远程主机上的项目。

下图中显示了该工具栏。

image::images/RemoteToolbar.gif[] 

如果您在 IDE 中看不到该工具栏，则可以通过选择 "View"（视图）> "Toolbars"（工具栏）> "Remote"（远程）来显示它。

您可以使用远程工具栏来选择已配置的远程主机并处理远程主机上的项目和文件，就如您在本地一样。

使用下表中所述的图标。

|===
|image::images/connected24.gif[]
 |

连接状态。单击该图标可连接到在该图标旁的列表中选定的服务器。如果您已连接，则可以单击该图标来断开与服务器的连接。

该图标通过在连接时变为绿色、在未连接时变为红色来指示连接状态。

 

|image::images/newProject24.gif[]
 |

创建远程项目。单击该图标可在当前连接的主机上创建新项目。

默认情况下，在远程主机上的 `~/NetBeansProjects` 目录中创建项目。

 

|image::images/openProject24.gif[]
 |

打开远程项目。单击该图标可在当前连接的主机上打开现有项目。

您可以浏览到远程文件系统上的项目。

 

|image::images/openFile24.gif[]
 |

打开远程文件。单击该图标可在当前连接的主机上打开文件。

您可以浏览到远程文件系统上的文件。

 
|===


== 高速缓存和安全性

为提供对远程文件的快速访问，IDE 在本地系统上使用磁盘高速缓存。该高速缓存位于 `_userdir_/var/cache/remote-files` 中，其中 `_userdir_` 对于用户唯一，并且其位置因运行 IDE 的平台不同而异。

可在 link:http://wiki.netbeans.org/FaqWhatIsUserdir[+http://wiki.netbeans.org/FaqWhatIsUserdir+] 处查看 `_userdir_` 的描述和每个平台的位置。

在简单模式和共享模式中使用远程开发时，将仅通过本地高速缓存访问系统头文件，因此不存在安全风险。

在完整远程模式中，尽管文件位于远程主机上，但是在本地计算机上对项目进行解析。因为要访问源文件以进行解析，所以会在本地主机上的 `_userdir_/var/cache/remote-files` 中高速缓存这些文件，而最终所有源文件都会位于高速缓存中。

在 Mobile 计算机上，这可能会被视为安全风险。为提高安全性，可以对高速缓存目录进行加密，也可以定期删除它。

使用简单模式时会创建位于远程主机上的 `~/.netbeans/remote` 中的高速缓存，并且在构建项目时会根据需要自动将源文件从本地主机复制到远程主机。这些文件与服务器上的任何其他文件一样安全，因此没有安全问题。


== 详细信息

有关详细信息，请参阅以下位置：

* 通过 IDE 中的“帮助”菜单可以访问有关使用 IDE 的广泛信息。

* link:./remotedev-tutorial.html[+C/C++ 远程开发教程+]讲述如何分步执行简单远程开发

* link:https://netbeans.org/kb/trails/cnd.html[+C/C++ 学习资源+]提供几篇有关在 IDE 中使用 C/C++ 进行开发的文章和教程。


link:/about/contact_form.html?to=3&subject=Feedback:%20C/C++%20Remote%20Development%20Modes%20-%20NetBeans%20IDE%20Article[+请将您的反馈意见发送给我们+]link:mailto:users@cnd.netbeans.org?subject=Feedback:%20C/C++%20Remote%20Development%20Modes%20-%20NetBeans%20IDE%20Article[+发送有关本文的反馈意见+]


