Вопросы по проектам / папки Projects и Shared Projects

 

Попытался начать работать с проектами, но что-то не ладится.

Допустим, уже есть исходный файл с инклудами. Справка радостно пишет, что легко создать проект из исходного файла. Я этой командой воспользовался. Получил файл проекта (mqproj) там же, где лежит исходник. Вопросы:

- Какой смысл в этом проекте (и вообще в проектах), если все осталось на своих местах? Я с таким же успехом мог продолжать кодить и компилировать те же самые файлы.

- Как создать проект на имеющемся исходнике с автоматическим переносом в папку Projects? Копировать вручную все, что нужно? Какую структуру папок создавать? Я надеялся при импорте исходника получить некую готовую иерархию папок.

- Если у меня будет готовый проект в папке Projects, как мне его перенести в Shared Projects?

- Как создать Shared Project из имеющихся локально исходников?

- При выделении любой из папок Projects или Shared Projects - контекстная команда Новый проект из исходного файла недоступна. Допускаю, что для общих проектов нужно быть залогиненным в хранилище, но зачем это для простых проектов? В чем разница между Projects и Shared Projects?

- Проект является синонимом MQL5 хранилища? Если проект способен хранить файлы в каталоге проектов только при подключении MQL5 хранилища, то зачем нужна путаница с проектом в виде голого файла mqproj?

- На тот случай, если какой-то косяк связан именно с созданием проекта из имеющихся исходников и чтобы обойти это, я выполнил команду Новый проект из контекстного меню Project, и мастер создал скрипт в обычной папке MQL5/Scripts. Как создать новый пустой проект в папке Projects?

 
Stanislav Korotky:

Попытался начать работать с проектами, но что-то не ладится.

Допустим, уже есть исходный файл с инклудами. Справка радостно пишет, что легко создать проект из исходного файла. Я этой командой воспользовался. Получил файл проекта (mqproj) там же, где лежит исходник. Вопросы:

- Какой смысл в этом проекте (и вообще в проектах), если все осталось на своих местах? Я с таким же успехом мог продолжать кодить и компилировать те же самые файлы.

- Как создать проект на имеющемся исходнике с автоматическим переносом в папку Projects? Копировать вручную все, что нужно? Какую структуру папок создавать? Я надеялся при импорте исходника получить некую готовую иерархию папок.

- Если у меня будет готовый проект в папке Projects, как мне его перенести в Shared Projects?

- Как создать Shared Project из имеющихся локально исходников?

- При выделении любой из папок Projects или Shared Projects - контекстная команда Новый проект из исходного файла недоступна. Допускаю, что для общих проектов нужно быть залогиненным в хранилище, но зачем это для простых проектов? В чем разница между Projects и Shared Projects?

- Проект является синонимом MQL5 хранилища? Если проект способен хранить файлы в каталоге проектов только при подключении MQL5 хранилища, то зачем нужна путаница с проектом в виде голого файла mqproj?

- На тот случай, если какой-то косяк связан именно с созданием проекта из имеющихся исходников и чтобы обойти это, я выполнил команду Новый проект из контекстного меню Project, и мастер создал скрипт в обычной папке MQL5/Scripts. Как создать новый пустой проект в папке Projects?

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

2) Автоматического переноса проектов нет, вы сами должны спроектировать место и структуру проекта.

3) Перенос проектов в разделяемые проекты только вручную. Сначала создайте разделяемый проект и только потом скопируйте нужные файлы вручную.

4) Вручную, смотрите пункт 3. Shared Project - это физически отдельная сущность в Subversion хранилище. Поэтому с ним можно работать совместно с другими разработчиками на основе версионных изменений.

5) Проекты могут быть локальными и в виде физической сущности в MQL5 Storage. Это физически разные вещи.

6) Физической сущностью в MQL5 Storage. Никакой путаницы нет, если не пытаться устроить бардак с локальной папкой.

7) Папка Projects устарела и исключена из работы, чтобы отключить старую идеологию. Поэтому не надо пытаться ее использовать.

 
Renat Fatkhullin:


Ну, для начала надо бы с одним файлом разобраться. Я в принципе имел в виду, что корневой файл проекта - один, из него подключаются другие. Бывает по-другому?

"Сначала создайте разделяемый проект" - как? Имеется в виду сделать вручную папку внутри Shared Projects и внутри нее подпапки для скриптов инклудов и прочих типов программ? Должны ли они иметь стандартные названия, соответствующие типам программ, или могут произвольные?

Если на имеющемся исходнике выполнить команду создать проект, как сделал я, то в чем смысл? Появился файл mqproj в той же папке - а в чем added value? Тут возник дополнительно вопрос - как теперь отучить ME компилировать проект целиком, если я нахожусь не в файле проекта? Как закрыть проект?

Если что-то устарело, может не показывать в программе? Бардак вот как-то сам по себе создается.

 
Renat Fatkhullin:

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

2) Автоматического переноса проектов нет, вы сами должны спроектировать место и структуру проекта.

3) Перенос проектов в разделяемые проекты только вручную. Сначала создайте разделяемый проект и только потом скопируйте нужные файлы вручную.

4) Вручную, смотрите пункт 3. Shared Project - это физически отдельная сущность в Subversion хранилище. Поэтому с ним можно работать совместно с другими разработчиками на основе версионных изменений.

5) Проекты могут быть локальными и в виде физической сущности в MQL5 Storage. Это физически разные вещи.

6) Физической сущностью в MQL5 Storage. Никакой путаницы нет, если не пытаться устроить бардак с локальной папкой.

7) Папка Projects устарела и исключена из работы, чтобы отключить старую идеологию. Поэтому не надо пытаться ее использовать.

Немного дополню Рената. 

У меня До сих пор в Projects висят десятки старых проектов. Некоторые, по причине развития, переношу в Shared Projects. Увы, на автомате, как и написал Ренат, это не сделать. Я делаю так.

1. Правый клик по Shared Projects -> Новый проект.

2. Обычно у меня в файле имя_проекта.mq5 находится минимум возможного, вся обработка идет в классах, которые расположены обычно в подпапке, имя_проекта\include. Нужно методом, доступном только серьезным профи, а именно копи-пасте, перенести кишки кода из старого проекта в файл имя_проекта.mq5. Это тяжелая, серьезная работа, занимает аж целых 5 минут!

3. Все проекты давно делаю мультиплатформенными, под МТ4 и МТ5. Это усложняет их по времени максимум на 10%, зато не надо думать о каких-то переделках, достаточно в свойствах проекта переключить таргет с Metatrader 5 на Metatrader 4, даже файл не надо переименовывать в .mq4. Очень приятная фишка, прошу MQ ее оставить и в дальнейшем. 

Вообще, я поражаюсь, я иногда все еще беру заказы. Выясняется, 90% заказчиков понятия не имеют о всех новых фишках в МТ5, часто провожу ликбез, после чего абсолютно все соглашаются на мультиплатформенный вариант, отказов еще не было.

4. Пользуясь случаем, хочу передать привет разработчикам. Ускорьте визуальное тестирование в МТ5 наконец-то. Это какая-то ахиллесова пята тестера МТ5. Ну и глюки с графикой надо уже поправить. Я именно поэтому и веду мультиплатформенные проекты, так как некоторые вещи в тестере МТ5 не работают годами, в отличие от МТ4.

5. К Ренату - а с сервисами что-то как-то двигается?

 
Stanislav Korotky:

Ну, для начала надо бы с одним файлом разобраться. Я в принципе имел в виду, что корневой файл проекта - один, из него подключаются другие. Бывает по-другому?

"Сначала создайте разделяемый проект" - как? Имеется в виду сделать вручную папку внутри Shared Projects и внутри нее подпапки для скриптов инклудов и прочих типов программ? Должны ли они иметь стандартные названия, соответствующие типам программ, или могут произвольные?

Если на имеющемся исходнике выполнить команду создать проект, как сделал я, то в чем смысл? Появился файл mqproj в той же папке - а в чем added value? Тут возник дополнительно вопрос - как теперь отучить ME компилировать проект целиком, если я нахожусь не в файле проекта? Как закрыть проект?

Если что-то устарело, может не показывать в программе? Бардак вот как-то сам по себе создается.

1. Главный файл_проекта.mq5 всегда один, все подключается к нему. Все, как и раньше. Если вы про раздельную компиляцию, то ее нет и стопудово не будет. Ибо не нужна на современных компах, век перфокарт и магнитных лент давно прошел.

2. Не надо создавать папку, создавайте проект, см. мой пост выше. Расширения должны быть стандартные.

3. Если в Навигаторе открыт проект, он и будет компилироваться, целиком. А зачем отучать???

4. В навигаторе выйти из папки проекта и открыть что-то другое.

 
Stanislav Korotky:

Ну, для начала надо бы с одним файлом разобраться. Я в принципе имел в виду, что корневой файл проекта - один, из него подключаются другие. Бывает по-другому?

"Сначала создайте разделяемый проект" - как? Имеется в виду сделать вручную папку внутри Shared Projects и внутри нее подпапки для скриптов инклудов и прочих типов программ? Должны ли они иметь стандартные названия, соответствующие типам программ, или могут произвольные?

Если на имеющемся исходнике выполнить команду создать проект, как сделал я, то в чем смысл? Появился файл mqproj в той же папке - а в чем added value? Тут возник дополнительно вопрос - как теперь отучить ME компилировать проект целиком, если я нахожусь не в файле проекта? Как закрыть проект?

Если что-то устарело, может не показывать в программе? Бардак вот как-то сам по себе создается.

У меня например вот такой проект.

Как видно я с ним работаю в обоих версиях. И компиляция происходит разных версий (для собственного использования, маркета, и бесплатной версии). Это еще не все файлы, есть дальше вложенные директории/файлы.

 

Так понял, вкладка "Хранилище" убрана из настроек ЛК

как-то можно попасть в хранилище напрямую теперь? 

  1. Вопрос безопасности: для хранилища и лк используются одинаковые пароли. Если есть возможность подобрать пароль от Хранилища, естественным образом это подбор пароля от ЛК.
  2. В метаэдиторе не получается залогиниться с паролем длиной более 25 символов. В метатрейдере можно.

Воспроизведение:

  • меняется пароль от ЛК, более 25 символов
  • Логинимся через метатрейдер, все работает
  • пытаемся логиниться в метаедитор - не получается
  • параллельно пароль в метатрейдере сбрасывается (приходится логиниться заново)
 

Спасибо за информацию. Не всё, конечно, применимо, но направление понятно - самообслуживание и метод тыка. Например, вижу совет "Не надо создавать папку, создавайте проект", но я в вопросе написал, что у меня пункты в шаред проектах недоступен, а в обычных проектах действительно можно создать новый пустой проект, но поскольку они "исключены из работы", то этот вариант уже не рассматриваем.

Странно читать вопрос, зачем отключать компиляцию всего проекта. А зачем она нужна, когда её не запрашивают? Допустим, я поработал с проектом, переключился на другую задачу, и как его закрыть? Он, в том числе, остается и в навигаторе, команды закрыть - нет. Вот этот совет "В навигаторе выйти из папки проекта" - не работает. Не вижу возможности выйти из папки проекта ;-). Я в неё не входил...

Понятие проектов существует в куче разных IDE фиг знает сколько лет. Везде сделано удобно и логично - проект организует и автоматизирует "воркспейс" (например, если есть команда создать проект из исходника, он переносится в воркспейс). Отсюда и ожидания чего-то похожего здесь. А что такое проект в МЕ, я так и не услышал ответа. Судя по справке, подключить SVN можно и без всяких проектов - Хранилище сразу после своего включения по любому настраивается на всю папку MQL5. 

И для чего нужен файл mqproj? Я бы еще понял, если в проекте можно указать несколько целей/программ, так нет же - цель только одна и проект просто дублирует те же данные (описание и зависимости), которые обычно берутся из mq5/mqh файлов.

Каждая подпапка в Shared Projects - это отдельный проект? Или файлы разных проектов могут быть вперемешку по подпапкам?

 

Stanislav Korotky:

Или файлы разных проектов могут быть вперемешку по подпапкам?

Да вполне могут. Можно создать проект чисто нужных функций/классов и т.п. и подключать их из других проектов.

#include "../dir/file"
Ни кто не отменял.
Причина обращения: