LINUX.ORG.RU

[SOLVED] Как указать Clang Code Model какой стандарт использовать

 , ,


0

2

Вопрос о QtCreator. Уже отчаился, почти дошло до копания в сорцах. Вопрос точно такой же как на stackoverflow: https://stackoverflow.com/questions/38053992/enable-c14-in-qtcreators-clangco...

Имеется Generic проект (не CMake, QBS или QMake) использующий C++17, который clang code model разбирает как C++14. Как заставить его использовать С++17?

  • Projects -> Clang Code Model -> Diagnostic Configuration не проходит внутреннюю вализацию. (Option "-std=c++17" is invalid)
  • Добавление компилятора (Compiler & Kit) с Platform Codegen Flags: -std=c++17 хоть и (вроди) работает, но выглядит страшным хаком.
  • В файле ${PROJECT_NAME}.config дописать #define __cplusplus 201703L вроди помогает, выглядит странно (но все же лучше, чем предыдущая опция).

Знаете еще какой способ?

★★★★★

Последнее исправление: KennyMinigun (всего исправлений: 3)

Уже отчаился, почти дошло до копания в сорцах.

Нашёл два рабочих способа решить свою проблему. Способы недостаточно красивы.

Отчаяние перфекциониста, оно такое

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

Ну, вообще, да.

Но еще хотел поделиться своими решениями и узнать что люди делают.

Причем, в первом способе неизвестно куда идут Platform Codegen Flags. А во втором не понятно как задать, например, -std=gnu++17

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

Option "-std=c++17" is invalid

Это креатор так ругается? Я бы заслал им багрепорт (если такого ещё нет).

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

Option "-std=c++17" is invalid

Это креатор так ругается? Я бы заслал им багрепорт (если такого ещё нет).

Они такое специально сделали с версии 4.5. Так что скорее всего WONTFIX. Только я не понял, что они предлагают взамен (по крайней мере для Generic проектов).

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

А вот так в *.pro-файле не проканает:

QMAKE_CXXFLAGS += -std=c++17
?

И еще есть CONFIG+=c++11, может уже CONFIG+=c++17 завезли? Хотя это на CLang не повлияет.

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

А вот так в *.pro-файле не проканает:

*.pro-файле

У меня Generic Project а не QMake (http://doc.qt.io/qtcreator/creator-project-generic.html)

А для QMake (*.pro) надо:

CONFIG += c++17

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

-std=c++1z?

Я вот и спрашиваю где это вписать. Кстати, уже можно -std=c++17

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

Если у тебя генерик проект без билдсистемы, то вторая опция выглядит наиболее вменяемой. Третья, наоборот, выглядит жутким хаком.

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

Если у тебя генерик проект без билдсистемы

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

Во-вторых, решение не привязано к проекту (ведь от проекта зависит с какими флагами его компилировать).

Ну и, я думал, что есть что-то в *.creator.user влияющее на флаги для Clang Code Model (и, возможно, сборки). Только вот документации не нашел. Потому хотел копаться в коде.

Третья, наоборот, выглядит жутким хаком.

В некотором смысле согласен, ибо оно как лечение симптомов вместо лечения болезни. Но, поскольку, работает синтаксис С++17 (а не только stdlib), то можно диагностировать успех подхода.

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

Хотя это на CLang не повлияет.

Повлияет. Clang даже ужасный по структуре CMake у меня распарсил и достал от туда `-std=c++17`, относящийся к аргументам сборки.

SR_team ★★★★★
()
14 февраля 2019 г.

Похоже, что в 4.9 (beta1) теперь можно нормально указывать флаги компиляции для «Generic» проектов: добавили файлы $PROJECT_NAME.cflags и $PROJECT_NAME.cxxflags

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

Попробовал туда вписать -include <путь к файлу с некоторыми определениями> ­— не подхватывает.

Пришлось по-старинке, .includes + .config

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