Мутные файлы для сборки проектов
От: 00011011  
Дата: 03.03.19 19:23
Оценка: 3 (1) +8 -2 :))) :))) :))) :))
Это типа крика души Для меня самое сложное в программировании это не собственно программирование, а разобраться с тем, как собрать чужие проекты (как правило open-source) скачанные из инета. Да, я понимаю что у меня наверное совершенно неправильный подход, и наверное никто так не делает.

Скачиваю какой-то проект, с гитхаба например. Хочу собрать. И что я вижу?
Вот например.
Это просто списки файлов (без директорий) которые лежат внутри. Это не исходники. А просто какие-то файлы.

  qbittorrent
.appveyor.yml
.editorconfig
.gitattributes
.gitignore
.travis.yml
5B7CC9A2.asc
AUTHORS
bootstrap.sh
Changelog
CMakeLists.txt
CODING_GUIDELINES.md
codingStyleQtCreator.xml
conf.pri.in
conf.pri.windows
configure
configure.ac
CONTRIBUTING.md
COPYING
INSTALL
macxconf.pri
NEWS
qbittorrent.pro
README.md
TODO
uncrustify.cfg
unixconf.pri
version.pri
winconf.pri


Или вот.
  libtorrent
.doozer.json
.gitignore
.gitmodules
.travis.yml
appveyor.yml
AUTHORS
autotool.sh
bootstrap.sh
build_dist.sh
ChangeLog
clang_tidy.jam
CMakeLists.txt
configure.ac
CONTRIBUTING.rst
COPYING
Jamfile
Jamroot.jam
libtorrent-rasterbar.pc.in
LibtorrentRasterbarConfig.cmake.in
LICENSE
Makefile.am
NEWS
README.rst
setup.py
sonar-project.properties


Это не программирование на С++, а черти что. Нужно знать кучу каких-то самопальных утилит, которые были применены авторами для каких-то целей.

Я наверное что-то делаю не так. Но у меня идеальный проект — это когда в корневой директории проекта лежит единственный файл проекта, и папки исходников (подпроекты, ресурсы и т.п.). И как правило именно так и получается. Все, никакого мусора. А тут — ну я не знаю что с этим делать.

Ну хорошо, я терпеть это не могу, но я знаю про cmake. Программисты любят костыли и придумывают новые для обхода старых.
Скачиваю последнюю версию, скармливаю ей это все, нажимаю Configure... ошибка! В самом синтаксисе cmakefiles.
  вот такая
CMake Error at cmake/Modules/LibtorrentMacros.cmake:75 (_cxx_standard_to_year):
  _cxx_standard_to_year Function invoked with incorrect arguments for
  function named: _cxx_standard_to_year
Call Stack (most recent call first):
  CMakeLists.txt:503 (select_cxx_standard)


CMake Error at cmake/Modules/LibtorrentMacros.cmake:76 (if):
  if given arguments:

    "GREATER_EQUAL" "2011"

  Unknown arguments specified
Call Stack (most recent call first):
  CMakeLists.txt:503 (select_cxx_standard)


Зачем мне с этим разбираться?

Смотрю там есть файл .pro. Вспоминаю что в Студии есть расширение для Qt, открываю через это расширение — открылось! Расширение сгенерировало solution. Пытаюсь пересборать — ошибка. Даже не компиляции, а какая-то мутная ошибка невозможности выполнить Custom Build для файла который нужно обработать программой moc. Опять фигня, не относящаяся к программированию никаким боком.

В итоге я плюну на все это, и как делал уже не раз — заведу пустой проект в Студии, добавлю туда чистые исходники из скачанного проекта и получу нужный результат. Возможно не сразу, но получу. Для простых проектов обычно сразу получается, для больших и сложных — через несколько итераций.
Потому что чистые исходники на С/С++, написанные нормальным образом, как правило компилируются. Иногда приходится подправить какие-то мелочи, добавлять библиотеки которых у меня нет — но по крайней мере это все понятно, компилятор ругнется например на "нет такого-то инклуда" и я полезу его искать, найду и в итоге добавлю новую библиотеку в каталог с библиотеками.

Что я хочу сказать?
А то, что комитет по стандартизации должен принудить всех разработчиков компиляторов к тому, чтобы был один единый для всех компиляторов и для всех операционных систем формат файла проекта, с простым и понятным json- или xml-подобным синтаксисом. Он должен быть единый и достаточный для того, чтобы загрузить проект в любую среду разработки и собрать любым компилятором путем выполнения одной единственной команды. И все вопросы внешних зависимостей должны также решаться компилятором и быть учтены в этом формате.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.