Использование Qt с кодом Visual Studio (Windows) - PullRequest
2 голосов
/ 19 июня 2020

Установлено следующее:

  • Visual Studio Code (1.45.1)
  • Visual Studio 2019 Community (для использования компилятора MSV C cl.exe)
  • Qt 5.15.0 (установлен в C: \ Qt)

Код Visual Studio был запущен после запуска Visual Studio Command Prompt, поэтому среда установлена ​​правильно для cl.exe. Расширение ms-vscode.cpptools было установлено в Visual Studio Code, а includePath имеет значение:

"includePath": [
    "${workspaceFolder}/**",
    "${INCLUDE}",
    "C:/Qt/5.15.0/msvc2019_64/include/**"
],

Этот файл hw.cpp компилируется и работает нормально:

#include <iostream>
int main()
{
    std::cout << "Hello world!";
    return 0;
}

Команда в tasks.json используется:

"command": "cl.exe",
"args": [
    "/Zi",
    "/EHsc",
    "/Fe:",
    "${fileDirname}\\${fileBasenameNoExtension}.exe",
    "${file}"
],

В качестве альтернативы, из встроенного Терминала внутри кода Visual Studio, команда «cl / EHs c / MD / O2 hw. cpp / link / out: hw.exe "компилирует все правильно, и hw.exe может быть выполнен.

Но когда я пытаюсь использовать Qt следующим образом, он не компилируется:

#include <QString>
int main()
{
    QString test("Hello world!");
    qDebug() << test;
    return 0;
}

Компилятор сообщает" фатальная ошибка C1083: не удается открыть включаемый файл: «QString»: нет такого файла или каталога ». IntelliSense находит QString.h, который открывается, когда я нажимаю Ctrl и нажимаю QString (вверху).

Что мне не хватает?

ОБНОВЛЕНИЕ

Благодаря комментариям от @ rioV8, я исследовал /link варианты для cl.exe. Аргументы задачи были обновлены до:

"args": [
    "/EHsc",
    "/MD",
    "/O2",
    "/IC:\\Qt\\5.15.0\\msvc2019_64\\include",
    "/IC:\\Qt\\5.15.0\\msvc2019_64\\include\\QtCore",
    "${file}",
    "/link",
    "/LIBPATH:C:\\Qt\\5.15.0\\msvc2019_64\\lib",
    "Qt5Core.lib",
    "qtmain.lib",
    "/OUT:${fileDirname}\\${fileBasenameNoExtension}.exe"
],

Это немного улучшило ситуацию. hw.cpp теперь компилируется и генерирует hw.obj, но теперь я получаю ошибки компоновщика (по одной для каждого .lib):

warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86'

За этим следует fatal error LNK1120: 2 unresolved externals.

Получение ближе, но все еще не связывается.

1 Ответ

1 голос
/ 25 июня 2020

Недавно в блоге KDAB появилось подробное руководство.

Обзор VS Code для разработчиков Qt:

Техническое руководство:

Действия в техническом руководстве очень похожи на описываемые вами проблемы; -)

...