// 
//     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.
//

= Удаленная разработка на C/C++ - Практическое руководство по IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials 
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Удаленная разработка на C/C++ - Практическое руководство по IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Удаленная разработка на C/C++ - Практическое руководство по IDE NetBeans

Март 2014 г. [Номер версии: V8.0-1]

В этом практическом руководстве показано, как использовать функции IDE NetBeans для удаленной разработки проектов C/C++/Fortran.



== Требования

*Для работы с этим учебным курсом требуется программное обеспечение, указанное ниже.*

|===
|Программное обеспечение |Требуемая версия 

|IDE NetBeans (включая поддержку C/C++) |link:https://netbeans.org/downloads/index.html[+версия 7.3, 7.4 или 8.0 с подключаемым модулем NetBeans C/C+++] 

|Комплект для разработчика на языке Java (JDK) |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Версия 7 или 8+] 
|===


Дополнительные сведения о загрузке и установке необходимого программного обеспечения см. в разделах link:../../../community/releases/80/install.html[+Инструкции по установке IDE NetBeans+] и link:../../../community/releases/80/cpp-setup-instructions.html[+Настройка IDE NetBeans для C/C++/Fortran+]
.


== Введение

В этом учебном руководстве показано использование функции удаленной разработки проектов C/C++.

А вы пробовали создавать приложения Solaris или Linux на ноутбуке под управлением Windows 7 или Mac OS X? Нужно тестировать приложение в других операционных системах прямо в среде IDE? Нужно компилировать крупные приложения на быстром многоядерном сервере, а не на обычной рабочей станции? Специально для таких случаев в IDE NetBeans была реализована возможность удаленной разработки.


== Ключевые понятия удаленной разработки

При удаленной разработке вы запускаете IDE NetBeans на клиенте и создаете проекты, редактируете файлы и используете функции помощи при работе с кодом точно так же, как при работе с локальными проектами. При этом в ходе сборки, выполнения или отладки проекта процесс выполняется на удаленном сервере Solaris или Linux, а входные и выходные данные передаются в клиентскую систему. В идеальном случае после настройки узла удаленной сборки разработчик не замечает разницы между локальным и удаленным режимами разработки.

IDE поддерживает различные режимы удаленной разработки, описанные в разделе link:./remote-modes.html[+Режимы удаленной разработки на C/C+++]. Вы можете выбрать наиболее удобный режим разработки на удаленном узле.


=== Требования для удаленной разработки

Для использования удаленного узла при запуске различных средств необходимо выполнение следующих условий.

* Локальная клиентская система, в которой установлена среда IDE, должна работать под управлением Windows, Mac OS, Oracle Solaris 10, Oracle Solaris 11 или Linux.
* Удаленный узел должен работать под управлением Oracle Solaris 10, Oracle Solaris 11 или Linux.
* Локальная клиентская система и удаленная система должны иметь доступ к файлам проекта через ресурсы с совместным доступом или при помощи протокола SSH.
* Клиент должен обладать возможностью подключения к удаленной системе через протокол SSH, даже если файлы проекта находятся в папках совместного доступа.
* В удаленной системе должен быть реализован доступ к поддерживаемому набору средств.
* В удаленной системе должны присутствовать системные библиотеки, необходимые для активации помощника при работе с кодом в проекте.


=== Совместное использование исходного кода

Клиентская система и удаленный сервер должны иметь сведения о файлах исходного кода. Файлы исходного кода могут находиться в каталоге с совместным доступом или могут быть безопасным образом скопированы средой IDE из локальной системы в удаленную. В разделе <<system,Настройка системы>> приведены дополнительные сведения о способах настройки общих папок в различных системах.


=== Взаимодействие

Обмен данными между клиентом и сервером осуществляется по протоколу Secure Shell (SSH). SSH представляет собой распространенный протокол для безопасного обмена данными между двумя сетевыми устройствами. На вашем сервере должен быть установлен сервер SSH, и должно быть разрешено соединение по протоколу SSH между клиентом и сервером.


=== Наборы средств

Как правило, IDE самостоятельно обнаруживает поддерживаемый набор средств на удаленном узле: GNU Compiler Collection, Sun Studio или Oracle Solaris Studio. Исполняемые файлы средств должны находиться в пути учетной записи пользователя, используемой для подключения к удаленному узлу, для быстрого доступа среды IDE к этим средствам. В особенности это касается средств, установленных в местоположениях, отличных от местоположений по умолчанию.


=== Вспомогательные функции

Для корректной поддержки функций редактора (например, автозавершения кода, семантического выделения, окна классов и др.) следует работать с проектом в корректно настроенной среде, т.е. среда должна содержать системные файлы include, определения макросов, платформу и пр. Все эти данные поступают с удаленного сервера и хранятся на локальном клиенте, поэтому при локальном изменении проекта помощник при работе с кодом будет активен, даже если проект настроен для работы с удаленным узлом сборки.


== Настройка системы

Удаленный сервер Linux или Solaris должен разрешить взаимодействие через протокол SSH с клиентского компьютера, на котором запущена среда IDE. При необходимости использования совместного доступа к файлам вместо копирования файлов средой IDE на удаленный сервер необходимо настроить совместный доступ к файлам для обеих систем.


=== Протокол SSH

Сервер SSH обычно содержится в операционных системах Linux и Solaris и по умолчанию запускается в большинстве случаев. Если сервер не запущен, то для получения сведений об установке и управлении SSH см. статью link:http://en.wikipedia.org/wiki/Secure_Shell[+http://en.wikipedia.org/wiki/Secure_Shell+]

Среда IDE предоставляет собственный клиент ssh, так что нет необходимости устанавливать клиент ssh на локальном компьютере.

Необходимо активировать соединение SSH между клиентской и серверной системами, что, как правило, означает наличие на сервере открытого порта 22. Если порт 22 отключен, то вам может понадобиться доступ с правами пользователя root (администратора) или помощь администратора системы.

Между системами должна быть разрешена передача данных по протоколу SSH, даже если для передачи файлов проекта на удаленный сервер не используется функция 'Автоматическое копирование' или SFTP.


=== Совместное использование исходного кода

Если вы еще не настроили общий доступ к файлам между системой Windows и удаленным узлом Unix для других целей, в небольших и средних проектах намного удобнее использовать функцию 'Автоматическое копирование' или SFTP вместо предоставления общего доступа к файлам. Если вы работаете над большим проектом и в сборке участвуют тысячи файлов, целесообразнее предоставлять общий доступ к файлам, так как копирование займет много времени.

Для схемы "Windows-UNIX®" существует два способа совместного доступа к ресурсам:

* Сервер Samba в системе UNIX
* Пакет служб Windows для UNIX (SFU), установленный в системе Windows


==== Упорядочивание исходных файлов с помощью Samba или SMB

Сервер Samba (версия SMB с открытым кодом) позволяет пользователю Windows подключать общие папки NFS как сетевые диски Windows. Пакет Samba или его эквиваленты SMB и CIFS в большинстве случаев входят в состав дистрибутивов операционных систем Linux и Solaris. Если пакет Samba не включен в дистрибутив вашей системы, его можно загрузить на веб-сайте link:http://www.samba.org/[+www.samba.org+]

При наличии привилегированного доступа к серверу настройку сервера Samba можно выполнить самостоятельно. Ссылки на инструкции приведены ниже. В противном случае для этого необходимо связаться с администратором системы.

* Краткая информация об Oracle Solaris 11: link:https://blogs.oracle.com/paulie/entry/cifs_sharing_on_solaris_11[+https://blogs.oracle.com/paulie/entry/cifs_sharing_on_solaris_11+]. Подробная информация: link:http://docs.oracle.com/cd/E26502_01/html/E29004/smboverview.html[+Управление общим доступом к файлам SMB и взаимосовместимость с Windows в Oracle Solaris 11.1+].
* Oracle Solaris 10: link:http://blogs.oracle.com/timthomas/entry/enabling_and_configuring_samba_as[+http://blogs.oracle.com/timthomas/entry/enabling_and_configuring_samba_as+]
* Linux: link:http://www.linux.com/articles/58593[+http://www.linux.com/articles/58593+]

После запуска сервера Samba папки сервера UNIX можно отобразить так же, как и папки Windows.


==== Службы Windows для UNIX (SFU)

Другой возможностью являются "Службы Windows для UNIX" - набор средств, предоставляемый компанией Майкрософт для доступа к файловым системам NFS из Windows. 
Эти службы можно загрузить из link:http://www.microsoft.com/downloads/details.aspx?FamilyID=896c9688-601b-44f1-81a4-02878ff11778&displaylang=en[+Центра загрузки Майкрософт+], а также просмотреть документацию на link:http://technet.microsoft.com/en-us/library/bb496506.aspx[+странице служб Windows для Unix+].

Пакет SFU недоступен пользователям Windows Vista или Windows 7. Версии Windows 7 Корпоративная и Максимальная содержат компоненты служб для Unix с именами "Подсистема для приложений на основе UNIX" (SUA) и "Клиент для NFS v 3". Дополнительные сведения приведены в статье link:http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX#Subsystem_for_UNIX-based_Applications_.28SUA.29[+http://en.wikipedia.org/wiki/Microsoft_Windows_Services_for_UNIX+]


==== Настройка Mac OS X

Система Mac OS X поддерживает подключение к серверам Samba. Кроме того, система Mac OS X может монтировать общие папки NFS с сервера.

Можно использовать команду "Finder" > "Переход" > "Подключиться к серверу" и ввести адрес сервера.

Для подключения к серверам SMB/CIFS (Windows) и папкам совместного доступа введите адрес сервера в одной из следующих форм:

[source,bash]
----
`smb://_DNSname/sharename_
smb://_IPaddress/sharename_`
----

Будет выведен запрос на ввод имени пользователя и пароля для папки совместного доступа. Дополнительные сведения приведены в разделе link:http://support.apple.com/kb/ht1568[+Подключение к совместному использованию файлов Windows (SMB)+] в базе знаний Apple (на английском языке).

Для подключения к серверу NFS введите имя сервера и путь к папке совместного доступа NFS в одной из следующих форм:

[source,bash]
----
`nfs://_servername/path/to/share/_
nfs://_IPaddress/path/to/share_`
----

Дополнительные сведения приведены в разделе link:http://support.apple.com/kb/TA22243[+Использование средства поиска для монтирования экспорта NFS+] в базе данных Apple.

Запрос имени пользователя и пароля не выводится, однако выполняется проверка подлинности уникального идентификатора Mac. Уникальный идентификатор (UID) является уникальным целым числом, присваиваемым имени пользователя в ОС типа Unix, например Mac OS X, Solaris и Linux. Для использования NFS уникальный идентификатор Mac должен совпадать с уникальным идентификатором учетной записи на сервере.


==== Схема "UNIX-UNIX"

Для предоставления общего доступа к файлам между системами Solaris или Linux не требуется специальных настроек. В одной из систем должна находиться общая папка. Возможно также использование домашнего каталога, если он смонтирован на сетевом файловом сервере и доступен из обеих систем.


=== Отображение пути

При использовании модели с ресурсами совместного доступа может возникнуть необходимость сопоставления расположения исходного кода на локальном узле с путем, используемым на удаленном узле.

Например, рассмотрим следующую схему:

* Сервер Solaris  ``solserver``  с папкой совместного доступа  ``/export/pub`` 
* Рабочая станция под управлением Windows XP с установленными службами SFU и местоположением  ``\\solserver\export\pub`` , смонтированным в качестве диска  ``P:`` 
* Файлы исходного кода проекта расположены на сервере  ``solserver``  в папке  ``/export/pub/myproject`` 

В этом случае с точки зрения сервера файлы исходного кода расположены в каталоге  ``/export/pub/myproject`` . В то же время с точки зрения клиента файлы исходного кода расположены в каталоге  ``P:\myproject`` . Необходимо, чтобы среда IDE могла распознавать подключенные пути: 
 ``/export/pub -> P:\`` 

Параметры подключенных путей можно изменить в свойствах узла сборки.

При настройке совместно используемых ресурсов для исходных файлов перед настройкой удаленного узла в IDE NetBeans среда IDE в большинстве случаев автоматически обнаруживает необходимые подключенные пути.


== Настройка среды IDE

В следующем примере клиентский узел является рабочей станцией под управлением Windows Vista. Удаленный узел с именем  ``edgard``  - это сервер под управлением операционной системы Oracle Solaris.

1. Откройте окно "Службы", выбрав меню "Окно" > "Службы".
2. Щелкните правой кнопкой мыши узел 'Узлы сборки C/C++' и выберите 'Добавить новый узел'.
image::images/remotedev-add-host.png[]В диалоговом окне 'Настройка нового удаленного узла' среда IDE обнаруживает узлы локальной сети. Имена узлов добавляются в таблицу в диалоговом окне. Зеленый индикатор указывает на то, что на этих узлах запущен сервер SSH.

[start=3]
. Дважды щелкните имя требуемого сервера или введите его имя непосредственно в поле "Имя сервера". Нажмите кнопку "Далее".
image::images/remotedev-setup-host.png[]

[start=4]
. Введите в окне "Настройка узла" имя пользователя и пароль, используемые для входа на удаленный узел, и выберите метод проверки подлинности. При работе с данным учебным курсом выберите "Пароль" и нажмите кнопку "Далее".image::images/remotedev-setup-host-auth.png[]

Для использования ключей ssh сначала необходимо настроить их вне среды IDE. Затем можно указать местоположение ключей ssh в среде IDE, и IDE сможет использовать эти ключи для установки подключения к удаленному узлу сборки по протоколу ssh.


[start=5]
. После установки подключения к серверу введите пароль в диалоговом окне "Проверка подлинности".

[start=6]
. Дополнительно можно щелкнуть "Запомнить пароль" для выполнения в среде IDE шифрования и сохранения пароля на локальном диске, чтобы ввод пароля не требовался при каждом подключении среды IDE к удаленному узлу.

Среда IDE настраивает удаленный узел и выполняет поиск наборов средств удаленного узла.


[start=7]
. После успешной настройки узла на странице общих сведений выводится информация об удаленном узле: платформа, имя узла, имя пользователя для входа, а также найденные наборы средств.
image::images/remotedev-setup-host-summary.png[]

[start=8]
. В нижней части страницы общих сведений отображаются еще два параметра. Если найдено несколько наборов средств, выберите один из них для определения его как набора средств по умолчанию.

[start=9]
. Настройка параметров доступа к файлам проекта:
* Если для клиента и удаленного узла сборки не настроен общий доступ к файлам проекта, выберите параметр 'Автоматическое копирование'. Если выбран параметр 'Автоматическое копирование', файлы проекта будут копироваться в домашний каталог на сервере с помощью команды sftp. Этот режим называется простой удаленной разработкой.
* Если для клиента и сервера настроена общая папка, выберите параметр 'Совместное использование файлов на уровне системы'. Этот режим называется совместной или комбинированной удаленной разработкой.
* Выберите SFTP (только в NetBeans 7.4 и 8.0) для использования безопасного протокола передачи файлов при копировании файлов проекта на удаленный узел. Аналогично функции 'Автоматическое копирование'.

[start=10]
. Для выхода из мастера нажмите кнопку "Готово".

[start=11]
. В окне 'Службы' новый удаленный узел отображается в структуре узла 'Узлы сборки C/C++'. Разверните новый узел: список "Наборы средств" должен содержать один или несколько наборов средств.
image::images/remotedev-remote-toolchain.png[]


=== Если в списке нет наборов средств

Если в списке под удаленным узлом отсутствуют наборы средств, выполните следующие действия.

* На удаленном узле добавьте в пользовательский путь узла каталог bin набора средств. Если наборы средств на удаленном узле недоступны, следует установить набор компиляторов GNU, либо программное обеспечение Sun Studio или Oracle Solaris Studio.
* Если путь к исполняемым файлам средств находится в пользовательском пути к удаленному узлу, можно попытаться повторно настроить набор средств в локальной системе. Щелкните правой кнопкой мыши узел в окне "Службы" и выберите команду "Восстановить наборы средств по умолчанию" для выполнения в среде IDE повторной попытки поиска наборов средств на удаленном узле.
* В качестве альтернативы щелкните правой кнопкой мыши узел в окне 'Службы' и выберите 'Добавить набор инструментов' для указания или перехода к путь к набору инструментов на удаленном узле.

Когда набор средств появится в списке, создание удаленного узла сборки будет завершено.

Используя информацию следующего раздела, вы сможете попрактиковаться в простой удаленной разработке.


== Сборка локального проекта на удаленном узле

1. Создайте новый тестовый проект (Файл > Создать проект).
2. Разверните 'Образцы > C/C++' и выберите 'Welcome'. Нажмите 'Далее'.

В этом примере не используются общие папки, поэтому можно хранить проект в местоположении по умолчанию в папке NetBeansProjects в каталоге пользователя Windows без предоставления общего доступа.

Если вы хотите использовать общие исходные файлы, убедитесь, что в поле 'Местоположение проекта' указан путь к папке, доступной для удаленного сервера.


[start=3]
. В списке 'Узел сборки' выберите новый удаленный узел. Список наборов средств будет обновлен для отображения доступных средств удаленного узла.
image::images/remotedev-new-project.png[]

[start=4]
. Для создания проекта нажмите кнопку "Готово". 

Проект Welcome_1 открывается в окне 'Проекты'.


[start=5]
. Наведите указатель мыши на имя проекта в окне 'Проекты'. Отобразится всплывающая подсказка с информацией о расположении проекта и удаленном узле сборки, выбранном для этого проекта.

[start=6]
. Нажмите кнопку 'Собрать' на панели инструментов или щелкните узел проекта Welcome_1 правой кнопкой мыши и выберите 'Собрать'. Тестовый проект будет собран удаленно на выбранном узле сборки.

[start=7]
. Откройте исходный файл  ``welcome.cc`` .

На иллюстрации показано, как работают функции 'Помощь при работе с кодом' при нажатии сочетания клавиш Ctrl-Space и установленном фокусе на символе  ``argc`` .

В окне 'Результаты' отображается имя узла, на котором было собрано приложение, а также тип удаленных компиляторов и утилиты make, с помощью которых выполнялась сборка. Файлы проекта находятся в пользовательском каталоге  ``.netbeans/remote/``  на удаленном узле.

image::images/remotedev-built-small.png[]

После настройки удаленного узла различия в рабочем процессе незаметны. Разработчик может пользоваться всеми функциями редактора (сборка, запуск, тестирование и отладка) таким же образом, как при локальной работе.


== Запуск сеанса работы с терминалом на удаленном узле

Можно запустить сеанс работы с терминалом безопасного интерпретатора команд (ssh) в рамках среды IDE для подключения к удаленной или локальной системе. Эта функция в особенности подходит для платформ Windows, изначально не поддерживающих SSH.

1. Нажмите на значок терминала в левой части окна 'Результаты'. 
image::images/remotedev-terminal-icon.png[]

В IDE открывается вкладка 'Терминал' и осуществляется переход к локальному или удаленному рабочему каталогу текущего проекта. Если для проекта используется удаленный узел сборки и вы уже подключились к этому узлу через IDE, повторный ввод учетных данных не потребуется.

image::images/remotedev-terminal.png[]

Во внутреннем терминале IDE можно выполнять любые действия, которые выполняются во время сеанса подключения к удаленному узлу по протоколу SSH.

Чтобы начать новый локальный или удаленный терминальный сеанс, используйте значки в левой части вкладки 'Терминал' или пункт меню 'Окно > Результаты> Терминал'.


== Рекомендации по удаленной разработке

* Также можно переключить проект на другой узел сборки. Для этого щелкните правой кнопкой мыши узел проекта и выберите 'Выбрать узел сборки'.
image::images/remotedev-set-remote-host-menu.png[]
* Свойства удаленного узла сборки можно изменить после первоначальной настройки. Для этого щелкните правой кнопкой мыши узел в окне 'Службы' и выберите 'Свойства'.
* Если удаленный узел используется для сборки и запуска приложения с графическим интерфейсом, можно выбрать в свойствах узла параметр "Включить перенаправление X11" для отображения интерфейса пользователя в локальной системе при его выполнении на удаленном узле.
* Если в ходе сборки проекта выполняется компиляция библиотек или создание других файлов в дополнение к основному продукту построения, среда IDE выведет запрос на загрузку файлов в локальную систему. При этом можно выбрать измененные файлы для загрузки.
* С проектами можно работать в полностью удаленном режиме, когда сам проект и средства находятся на удаленном узле. Дополнительные сведения см. во встроенной справке IDE или статье link:./remote-modes.html[+Режимы удаленной разработки на C/C++ +].
* Данные по удаленному узлу и средствам доступны в меню среды IDE "Сервис", а также в окне "Службы". Выберите Сервис > Параметры > C/C++ > Средства сборки и нажмите кнопку 'Изменить' рядом со списком 'Узел сборки'.
* При использовании функции совместного доступа к файлам проекта можно отобразить локальный и удаленный путь к папкам совместного доступа при помощи функции "Отображение пути". Настроить подключенные пути можно одним из следующих способов:
* В окне 'Службы' откройте категорию 'Узлы сборки C/C++', щелкните правой кнопкой мыши имя узла и выберите 'Указатель путей'.
* В меню IDE 'Сервисы' выберите 'Параметры > C/C++ >Средства сборки', нажмите кнопку 'Изменить', выберите удаленный узел и нажмите кнопку 'Отображение пути'.


== См. также

Подробнее см. в следующих местоположениях.

* Меню 'Справка' в IDE обеспечивает доступ к обширной информации об использовании IDE.

* Различные способы работы в режиме удаленной разработки описаны в статьеlink:./remote-modes.html[+Режимы удаленной разработки на C/C+++]

* link:https://netbeans.org/kb/trails/cnd.html[+Учебные карты C/C+++] содержат несколько статей и учебных руководств по разработке на C/C++ в IDE.

link:mailto:users@cnd.netbeans.org?subject=Feedback:%20C/C++%20Remote%20Development%20-%20NetBeans%20IDE%208.0%20Tutorial[+Отправить отзыв по этому учебному курсу+]


