Я embedded-программист и привык к тому, что папка с проектом содержит все необходимые для компиляции файлы. Другой программист взял твою папку с проектом и у него тоже все компилируется. Я довольно смутно понимаю, как правильно использовать общие библиотеки (будь то dll или so).
Некоторое время назад у нас возникла необходимость писать небольшие программки под линукс для одноплатных компьютеров (причем как для ARM так и для x86), и мы попытались это свойство сохранить (у нас не получилось).
Учитывая, что все мои коллеги и я сидим под Windows, мы пошли следующим путем:
- Нашли кросс-gcc (для ARM и для x86).
- Настроили эклипс и подняли удаленную отладку на одноплатниках через ssh.
В принципе, это решение работает, бинарник-то получается. Но есть несколько проблем:
- Путь к компилятору жестко прописан в настройках проекта
- Все библиотеки, которых нет в поставке с компилятором, приходится компилировать на одноплатнике, тащить в Windows и потом вручную прилинковывать. По одной. Пути при этом тоже жестко прописаны.
- Ресурсы прилинковать можно только через objcopy.
У меня есть сильное подозрение, что вышеописанный способ является извращенным набором костылей. Но я, к сожалению, не нашел способа получше.
- Можно вести разработку прямо на одноплатнике, но к некоторым нельзя подключить монитор, а я развращен графическими IDE и к vim/emacs морально не готов.
- Можно бы поставить на рабочий комп линукс (или виртуалку с линуксом), но компиляция под ARM все равно потребует кросс-компилятора и библиотек, скомпилированных под ARM.
Собственно, вопрос: как это делают нормальные люди?
Не могли бы вы пояснить, а на рабочей станции вы предлагаете таки линукс ставить? А как быть, если мне на армовой машине понадобиться, например, qt? Сейчас я под армом qt из исходников собрал и потом бинарники на рабочую станцию утащил, чтобы к ним прилинковаться. Чувствую, это было как-то не очень правильно.
sim3x: т.е. вручную тащить на машину для сборки собранные под арм либы - это нормально? Или лучше, например, их через sshfs брать прямо с одноплатника?
sim3x: эмм. Так, смотрите. Мне нужно скомпилировать прогу для одноплатника с армовым процом. Я хочу в этой проге использовать qt. Чтобы прогу слинковать, будут нужны qt-шные .so-файлы, собранные под арм. Вопрос - как быть?
Ставим себе apt-get source PACKAGENAME которий нужен и собираем его с помощью тулчейна для арм, потом тестим его в том же qemu-system-arm или на реальном железе
Как сделать тоже самое на винде, я не знаю
Возможно сделать несколько прокладок в виде виртуалок
Если использовать тулчейн и ИДЕ из винд, то логичнее использовать вагрант
Александр: у меня основная боль в том, что под винду приходится тащить библиотеки, чтобы к ним прилинковаться. Если я хочу qt, например, использовать. Не подскажите, как без этого обойтись?
Присоединясь к cmake. Идея "все необходимое в одной папке" интересна, но она не масштабируется. не масштабируется до больших проэктов со многими компонентами и их собственными зависимостями. Для этого собственно и созданы менеджеры таких проэктов. Windows ориентирован на идеологию ...Windows, с вращением вокруг MS Windows SDK, если надо другое, сам сам сам (есть начинания типа nuget, но это не интегральное решение, а патч). Gcc из другой (эко)системы. Я устанавлижаю пакет (pacman -S gcc ...) и все пакеты (магически) сами находятся, и мне не надо думать, где что, на другом комке я установлю теже пакеты и все. Никаких жестких путей. Это личное мнение.
Что все необходимое в одной папке не поместиться я уже понял и смирился, но хочется как-то более-менее удобно управляться с зависимостями. Если я кросс-компилирую в винде, то приходится в нее тащить заголовочные файлы и библиотеки из линукса. Как-нибудь этого можно избежать?