環境

  • Ubuntu 20.04 LTS
  • Qt 5.12.8
  • GCC 9.3.0

QtのドキュメントやチュートリアルはqmakeやQtCreaterなどを使用していて内部で何をしているかわかりにくいのでMakefileだけを使ってコンパイルしてみる。

ubuntuの場合、以下のコマンドでqtをインストールすることを前提とする。

1
sudo apt install qt5-default

私の環境ではインクルードファイルが/usr/include/x86_64-linux-gnu/qt5に、ライブラリファイルが/usr/lib/x86_64-linux-gnuにインストールされていた。

Qtのアプリは普通のC/C++アプリケーションと同じようにヘッダファイルとライブラリファイルがあれば良いのでこれらを使うようにg++にオプションをつける。

最低限必要なライブラリはlibQt5Core.so,libQt5Gui,libQt5Widgetsなので、以下のオプションをつける。

1
-I/usr/include/x86_64-linux-gnu/qt5/ -L/usr/lib/x86_64-linux-gnu -lQt5Core -lQt5Gui -lQt5Widgets

このオプションをつけてコンパイルしてみると以下のようなエラーが出るので-fPICオプションをつける。

1
Compile your code with -fPIC (-fPIE is not enough).

私はvscodeで開発したいので、.vscode/c_cpp_properties.jsonにインクルードパスを設定した。

最小のコードは以下のとおりである。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <QtWidgets/QApplication>
#include <QtWidgets/QPushButton>

int main(int argc, char** argv) {
QApplication app(argc, argv);

QPushButton* button = new QPushButton("ほげほげ");
button->resize(200, 200);
button->show();

QObject::connect(button, &QPushButton::clicked, &app, &QApplication::quit);

return app.exec();
}

以下のコマンドでコンパイルできる。

1
g++ main.cpp -L/usr/lib/x86_64-linux-gnu -lQt5Core -lQt5Gui -lQt5Widgets -I/usr/include/x86_64-linux-gnu/qt5 -fPIC -g -o main