LINUX.ORG.RU

Можно ли задать компилятор при сборке через qmake?

 , ,


0

2

Привет, ЛОР.

Есть проект на основе qmake, который должен уметь собираться как в clang, так и в g++.

По умолчанию qmake генерирует Makefile для g++, в дебиане, на котором идёт сборка, оба компилятора присутствуют. При сборке в Qt Creator я могу выбрать «комплект» из версии Qt и компилятора. Это работает.

Но хотелось бы получить такую же гибкость и при сборке из командной строки. Версия Qt определяется самим запускаемым qmake, тут понятно. А вот как задать компилятор? Может, ключом qmake (я такого не нашёл, но возможно, плохо искал)? Или конфиг какой надо править?..

★★★★★

В Qt Creator посмотреть опции запуска qmake не судьба?

anonymous
()

А вот как задать компилятор? Может, ключом qmake

$ qmake QMAKE_CC=clang QMAKE_CXX=clang++.

Или конфиг какой надо править?..

It is possible to use this variable inside the *.pro file, however, it is not recommended since it will override any ABIs specified on the qmake command line.

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

Спасибо. Да, конечно же, через qmake это делать предпочтительнее, чем файл проекта портить.

Попробую.

hobbit ★★★★★
() автор топика

Вообще, наиболее правильный способ — это выбрать подходящий mkspec, например

qmake -spec linux-clang

или

qmake -spec linux-clang-libc++

Спеки «из коробки» лежат в $QTDIR/mkspecs (или куда их засунули в дистрибутиве, если Qt из пакетов, например, /usr/lib/x86_64-linux-gnu/qt5/mkspecs)

Но вариант с QMAKE_CXX тоже не запрещён, просто он более низкоуровневый и может понадобиться в каких-то случаях менять и другие переменные (чем mkspec и занимается)

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)

Вообще, наиболее правильный способ - использовать cmake вместо этой deprecated параши. Но да, если ты не можешь прочитать страницу доки про флаги, то это бессмысленно советовать.

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

deprecated параши

4.2, qmake поддерживается наряду с cmake. Deprecated – это qbs.

Это даже не говоря о том, что cmake значительно более многословен, чем qmake, особенно если надо поддерживать несколько мажорных версий Qt.

Пожалуй, единственное достоинство cmake это его значительно большая распространённость за пределами Qt-проектов, в частности, наличие большого количества модулей на любой чих. И то, люди уже давно начались жаловаться на грабли.

Я бы вообще на meson/muon перешёл, но он с Qt вроде как не дружит.

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

cmake значительно более многословен, чем qmake, особенно если надо поддерживать несколько мажорных версий Qt.

Но примеры ты конечно же не покажешь.

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

использовать cmake вместо этой deprecated параши

Поесть говна — так полной ложкой

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

Спеки «из коробки» лежат в $QTDIR/mkspecs (или куда их засунули в дистрибутиве, если Qt из пакетов, например, /usr/lib/x86_64-linux-gnu/qt5/mkspecs)

Если найти дистрибутивный mkspecs у кого-то вдруг не получится, то попробуйте

ls `qmake -query QT_HOST_DATA`/mkspecs

(вместо qmake подставьте именно тот qmake, который вы запускаете при сборке, он может называть qmake6 или qmake-qt5 или как-то похоже)

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от annulen

Если найти дистрибутивный mkspecs у кого-то вдруг не получится, то попробуйте

Уж в Debian’е то должны их по адекватным путям положить.

(вместо qmake подставьте именно тот qmake, который вы запускаете при сборке, он может называть qmake6 или qmake-qt5 или как-то похоже)

А адок с переменной QT_SELECT= где кстати был?

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

Тут смотря что считать адекватным. Когда файлы, которые в норме ставятся в единый префикс $QTDIR раскиданы по системе часть в /usr/lib/x86_64-linux-gnu/qt5, часть в /usr/lib/qt5 и часть в /usr/share/qt5 — это не то, что мне хочется считать адекватным (и разумеется, хедеры тоже отдельно, /usr/lib/x86_64-linux-gnu/qt5)

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

А адок с переменной QT_SELECT= где кстати был?

Это qtchooser, но я в нём не спец.

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

А адок с переменной QT_SELECT

... экранирование строк, недокументированные переменные....

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

Deprecated – это qbs.

4.2, qbs живее всех живых, и за его разработкой стоит пусть и небольшое, но всё-таки сообщество. А у qmake впереди нет ничего, кроме смерти, главный разработчик давно уволился, а из проекта его выгнали за несоблюдение CoC.

annulen ★★★★★
()
Последнее исправление: annulen (всего исправлений: 1)
Ответ на: комментарий от annulen

+100500: qbs = сила, cmake = могила

главный разработчик давно уволился, а из проекта его выгнали за несоблюдение CoC.

дада, освальд бугенхаген был еще тем перцем.

anonymous
()
Ответ на: удаленный комментарий

Нуну, ты у нас по-видимому очередной осилятор… Несите нового осилятора, похоже этот ща порвется от своей важности.

anonymous
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.