2020/03/12(木) [n年前の日記]
#1 [prog] Qt Creator + Qt Quick を使うとリリースビルドができない件
Windows10 x64 1909 + Qt 5.14.1 + Qt Creator 4.11.0上で、Qt Quick を使ったアプリを作ろうとすると、「リリース」でビルドができない件について。
どうやら、Qt Creator が自動生成する Makefile がマズい、ような気がする。たぶん。
どうやら、Qt Creator が自動生成する Makefile がマズい、ような気がする。たぶん。
◎ 不具合が起きる仕組み。 :
「target pattern contains no '%'. stop」というメッセージは、make が、Makefile を解析できなかった時に出てくるお決まりのメッセージだそうで。ちなみに、Qt の場合、make として qmake を使ってるらしい。
ビルド時に Qt Creator は Makefile を自動生成するのだけど、Makefile の該当行を見たら、「C:_home_prg_〜」てなファイルパスが指定されていた。これはおそらく、「:」がヤバイ…。
Windows にはドライブという概念があるので、ドライブ文字がファイルパスに含まれる時がある。「C:\hoge\」とか「D:\fuga\」とか。そして、ドライブ文字とディレクトリ名を分けるための区切り文字として「:」が使われる。
ところが、make が読む Makefile のルールでも、「:」が区切り文字として使われている。例えば、「hoge.o: hoge.c」と書けば「hoge.o を作るためには hoge.c が必要だよ」という指定になるけれど、「:」が前後を分離する区切り文字になってる。
つまり、Qt Creator が自動生成する Makefile 内で、「hoge: C:_home_prg_〜」みたいな記述が出てくるものだから、qmake が「おいおい、区切り文字がたくさんあるぞ。意味わかんねーよ」とエラーメッセージを出してそこで処理が止まってしまう ―― という状態なのだろう。たぶん。
ビルド時に Qt Creator は Makefile を自動生成するのだけど、Makefile の該当行を見たら、「C:_home_prg_〜」てなファイルパスが指定されていた。これはおそらく、「:」がヤバイ…。
Windows にはドライブという概念があるので、ドライブ文字がファイルパスに含まれる時がある。「C:\hoge\」とか「D:\fuga\」とか。そして、ドライブ文字とディレクトリ名を分けるための区切り文字として「:」が使われる。
ところが、make が読む Makefile のルールでも、「:」が区切り文字として使われている。例えば、「hoge.o: hoge.c」と書けば「hoge.o を作るためには hoge.c が必要だよ」という指定になるけれど、「:」が前後を分離する区切り文字になってる。
つまり、Qt Creator が自動生成する Makefile 内で、「hoge: C:_home_prg_〜」みたいな記述が出てくるものだから、qmake が「おいおい、区切り文字がたくさんあるぞ。意味わかんねーよ」とエラーメッセージを出してそこで処理が止まってしまう ―― という状態なのだろう。たぶん。
◎ 対策が思いつかない。 :
だったら、その Makefile を手打ちで修正して、「C:_home〜」を「_home〜」にでも書き換えてからビルドすればいいんじゃね? と思って試してみたのだけど、Qt Ceator はビルド時に毎回 Makefile を自動生成して、既にある Makefile を上書きしちゃうようで…。手打ちで修正しても意味が無い…。
これは勝手な想像だけど。Qt開発陣は、Mac か Linux で開発してるんじゃないのかなと。Mac や Linux はドライブ文字なんてないから、こんな不具合には遭遇しないはず。Windows上で make を使う時だけ発生する問題なわけで。
Windows + Qt Creator も、Qt Quick を使わない旧来のQtアプリの作り方なら、こういう不具合は起きないようで。そこはさすがにちゃんと動作確認してから公開してるのだろう…。でも、Qt Quick 使用のアプリ作成に関しては、Mac or Linux だけで動作確認して、Windows上で動くかどうかはちゃんとチェックしてないのでは…。もしかすると、Qt Quick を使ってる人って、そのぐらい少ないのかもしれない。たぶん。
さておき、では一体どうすればいいのか。
qmake を別の make に変えたりできないのかな。あるいは、MinGW を使わず MSVC にしたら状況が変わったりしないか。
Qt公式サイトでバグ報告されてないかと検索してみたけれど、Windows + Makefile 関連のバグ報告がたくさんあって、しかも全部英語なので、何が何だか…。
これは勝手な想像だけど。Qt開発陣は、Mac か Linux で開発してるんじゃないのかなと。Mac や Linux はドライブ文字なんてないから、こんな不具合には遭遇しないはず。Windows上で make を使う時だけ発生する問題なわけで。
Windows + Qt Creator も、Qt Quick を使わない旧来のQtアプリの作り方なら、こういう不具合は起きないようで。そこはさすがにちゃんと動作確認してから公開してるのだろう…。でも、Qt Quick 使用のアプリ作成に関しては、Mac or Linux だけで動作確認して、Windows上で動くかどうかはちゃんとチェックしてないのでは…。もしかすると、Qt Quick を使ってる人って、そのぐらい少ないのかもしれない。たぶん。
さておき、では一体どうすればいいのか。
- Qt Quick を窓から投げ捨てる。
- Qt Creator を窓から投げ捨てる。
- Qt を窓から投げ捨てる。
- Windows を窓から投げ捨てる。
qmake を別の make に変えたりできないのかな。あるいは、MinGW を使わず MSVC にしたら状況が変わったりしないか。
Qt公式サイトでバグ報告されてないかと検索してみたけれど、Windows + Makefile 関連のバグ報告がたくさんあって、しかも全部英語なので、何が何だか…。
[ ツッコむ ]
以上です。