стыковки/нестыковки версии ардуино/библиотек, внешне-локальные подключения исходников/библиотек

sunjob
sunjob аватар
Offline
Зарегистрирован: 18.07.2013

добрый день

очень часто, особенно сейчас - при написании скетчей и внешних библиотек (таких как CyberLib, LiquidCrystal итд) - происходит нестыковка версий библиотек с версиями Arduino (уже чего-чего а этого у нас сколько хочешь и нестыковок и просто косяков... :о)

мне эта современная хрено-байда с писакакателями, их версиями и скоростями выпуска, наполненностями багами и всеобщим переходом от "стабильных версий" на вселенский "текущий анстейбл" в гит хранилищах... итд ...

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

короче, к чему это я все? :о)

а вот, очень часто, а это можно сказать ВСЕГДА, версии сторонних библиотек - привязаны к конкретным версиям дурины-гуи (в плане более менее неглючности или вообще работоспособности), и если мы вдруг да поменяли/обновили как.либо библиотеку, допустим, ту же CyberLib - и залии ее в каталог пользовательских библиотек а еще (или наоборот) - обновилил саму дурину, но не обновили под нее эту самую библиотеку - вот тут и начинаются скачки с поиском "и чего тут у нас случилось, ведь до этого все работало"... а всего-то поменялись версии "чего либо"... и уже надо либо откатываться обратно, либо докатываться вперед ...

итак, как можно всю эту хрень спокойно обойти и решить еще попутно "непроявившиеся особенности"?!

а нет ни чего проще :о)

делаем примерно следующее:
- у нас есть "каталог ардуино-проекта", допустим xxx/main/main.ino, помещаем каталог-проекта - в подкаталог (для чего "поймете" позже) ... да, собственно, это не обязательно, но для понимания чего-таки делаем - надо, далее сами уже решайте как строить ваши деревья исходников:

xxx/main/* -->
xxx/main-prj/main/*

- создаем папку "src"
xxx/main-prj/src

в который и помещаем все "наши нужные в данном проекте" версии бибилотек
xxx/main-prj/src/CyberLib/*
xxx/main-prj/src/LiquidCrystal/*

- из каталога-проекта делаем ссылки на "внешне-локальные" библиотеки
ln -s ../src/CyberLib
ln -s ../src/LiquidCrystal

- в самом ардуино-файле (*.ino) - вместо глобальных подключений - делаем локальные, типа
#include <CyberLib.h>
-->
#include "CyberLib/CyberLib.h"

и ВУ-А-ЛЯ

все это, конечно же под линухами... под масдаем, видимо, можно тоже выкрутиться, типа скинуть библиотеки в каталог проекта и подключать в нем так же... или еще как (читал, что в 7ке вроде как уже есть возможность создавать ссылки - ну что же своевременно :о)

почему я использую внешний/верхний каталог src - для библиотек (на верхнем уровне, от. текущего проекта)?
- все очень просто, для текущего проекта пишутся так же и "отладочные" скетчи, кот. так же используют эти "внешне-локальные" библиотеки, и так же их подключают... в противном случае, пришлось бы "тупо" копировать все необходимые бибилотеки в каталог с "каждым отладочным скетчем"... что не есть гут :о)

плюс ко всему, пытался подключать внешние библиотеки без ссылок, примерно так:

#include "../src/CyberLib/CyberLib.h"

у меня "проявлялись" какие то глюко-особенности, зовисимые от версии arduino (короче, не стал разгребать конюшни - а создал линки и забыл про эти косяки)

...

коротко, дерево каталогов (для кого-то проще понять смысль таким образом)

xxx/main-prj/src/   - каталог с библиотеками
xxx/main-prj/main/  - каталог ардуино-проекта
                    - ссылки на "внешние-локальные" библиотеки
xxx/main-prj/main/* -->
xxx/main-prj/main/src/*

п.с. для скептиков :о) - все апробировано/отлажено/отработано и давно работает так как надоть (возможно, сходу, написал немного "коряво", но, надеюсь, те кому это действительно надо и сам разбирается - тот и осилит дорогу, главное волшебный пендель в нужном направлении, с коррекцией на ветер :о)

все имхо, всем удачи :о)

 

sunjob
sunjob аватар
Offline
Зарегистрирован: 18.07.2013

ошибочку исправим:

- ссылки на "внешние-локальные" библиотеки
xxx/main-prj/main/* -->
xxx/main-prj/src/*