LINUX.ORG.RU

Qt (QML) + cmake

 , ,


0

2

Вечер добрый.

Ситуация такая. Есть проект, использующий QML (гуй с кнопочками), есть либа, которая собирается cmake и должна линковаться с первым. Есть ли какой рецепт для добавления проекта сmake в проект qmake (*.pro)? то есть чтоб он отслеживал сам изменения в коде библиотеки, собирал ее и потом уже линковал то, что получилось с гуйнёй?

в идеале вообще хочется такого

  • Если не найдена либа, выкачать ее (git, svn)
  • собрать либу (cmake), получить пути к результату (*.a или *.so)
  • слинковаться с либой.

переводить первое на сmake, увы, не вариант, со вторым тоже :(

Спасибо.


Сделай безусловный мэйк для либы, а на cmake файл либы добавь кастомную цель в которой будешь выкачивать либу.

batbko ()

Так никто не делает. Библиотека ставится в систему, cmake других проектов находит её через FIND_PATH+FIND_LIBRARY (ну или в особых случаях через .cmake файл который библиотека устанавливает).

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

slovazap ★★★★★ ()

Да, и отдельно про выкачивание - подумай о том что при выкачивании можно подложить тебе любой код, это делает сборку зависимой от сети а результат непредсказуемым. При сборке пакетов почти везде доступ к сети запрещён. В то же время вне сборки забандлить другой репозиторий можно через git submodule, хотя это тоже не слишком хорошо, особенно с чужими проектами.

slovazap ★★★★★ ()
Ответ на: комментарий от batbko

мэйк для либы

проблема в том, что эта либa собирается еще и под винду, а писать мейк, кототрый будет работать и там, я, увы, не силен, да и венды у меня нет. Там, вроде как, какой-то nmake есть, который другой формат имеет. К тому ж под виндой все собирается студией (8-13).

А с cmake тут есть вариант создавать студийные проекты и собирать

villu ()
Ответ на: комментарий от slovazap

иначе получается редкостная херня.

согласен, так и получается. Но библиотеку ставить в систему (ну чтоб ее cmake нашел) никто не собирается, потому как линкуется оно статически и нафик в системе не нужна.

villu ()
Ответ на: комментарий от villu

Есть такое понятие как build depend - зависимость времени сборки. Оно также нужно и будет стоять в системе как компилятор.

slovazap ★★★★★ ()
Ответ на: комментарий от slovazap

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

Сейчас какая ситуация. Либа собирается, в определенное место, это место известно, и оно прописано в .pro. И это устраивает в 95% случаев. Проблема в том, что если обновить исходники библиотеки (git pull..., например) то файлы *.h будут не от той либы, которая собрана раньше.
Я хотел это дело немного оптимизировать, потому что надоело напоминать о том, что после обновления исходников нужно собирать заново (make или MsBuild). думал, может есть способ заставить qmake за этим следить.

villu ()
Ответ на: комментарий от villu

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

А с cmake тут есть вариант создавать студийные проекты и собирать

msbuild прекрасно работает из консоли, так же как и сама студия

batbko ()
Ответ на: комментарий от villu

Библиотека. Ставится. В систему. Как qt и все остальные зависимости. При этом такого что инклуды от одной версии а .so от другой быть не может. Если библиотеку нужно обновить, обновляется установленный пакет. Также целиком, и инклуды и .so.

slovazap ★★★★★ ()
Ответ на: комментарий от villu

Человек вещал о том, что реально делать bundle - не имеет смысла почти никогда, а тех кто так делает возникает желание как минимум побить.

Я с сим мнением согласен но рабочий вариант предложил :)

Вообще да, если есть возможность - не нужно таскать либу с собой, но я не в курсе как в qmake кошерно делаются зависимости для не Qt библиотек.

batbko ()
Ответ на: комментарий от batbko

Человек вещал о том, что реально делать bundle - не имеет смысла почти никогда, а тех кто так делает возникает желание как минимум побить.
Я с сим мнением согласен

Почему?

tailgunner ★★★★★ ()
Ответ на: комментарий от batbko

только вызвать тул, который умеет его проигрывать.

вот я и хотел бы узнать, есть ли способ более прямой, чем пользование system(cmake ... ), который создаст make.

slovazap тут предлагает ставить библиотеку в систему...можно, но, чёрт возьми, не всё так идеально иногда...

villu ()
Ответ на: комментарий от villu

не всё так идеально иногда...

Зависимости в системе - это не «идеально» это «нормально и очевидно». Вы же Qt и иксы с собой не таскаете?

slovazap ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.