Visual Studio 2019で外部ライブラリの導入で苦しんだこと

OpenGLを勉強しようとWindows環境でC++に手を出しているのですが、 Visual Studio 2019(以下VS)にてダウンロードしてきたライブラリを導入するのに手こずりまくってました。

結論だけ先に言っておくと、プラットフォームの指定がミスってたところが原因でした。

WindowsでVSを使ってC++を始めようとインクルードパスの指定して正しいのになんで通らないんだって人がもしいたら 私と同じ現象に陥ってる可能性が非常に高いです。

相対パスでヘッダファイルを読み込むと普通に通るので指定したディレクトリ自体は問題ないのがわかるので そういったときはプロジェクトの設定の問題ということに絞られます。

外部ライブラリのヘッダファイルをインクルードしたかった

Node.jsとかだとパッケージマネージャーで指定の名前を入れてコマンドを打てば 勝手にインストールしてくれて後は呼び出すだけで使えるので凄い楽なんですが C++とかだと自分でソースコードからコンパイルしてできたものを自分でパスを通して動かす というのが基本になってきます。

調べているとC++用のパッケージマネージャーみたいなものもあったのですが、 Winodowsではあんまり普及していない?ような感じがしました。

ちゃんと調べてないのでもしかしたらWindowsでも、 nodeでいうnpmやyarnみたいな便利なものが有るのかも知れません。

それでもC++の場合は自分でソースコードからライブラリを生成するという行為は 覚えておいて損はないというか覚えておかないと色々ダメな感じがヒシヒシと伝わってくるので これを機にちゃんと覚えようと思いOpenGL以外にもSDLというゲーム作りに使えるライブラリを導入したりしてみました。

サンプルと同じ書き方をしてもパスが通らない

幸い書籍側が用意してくれたサンプルを動かしてみると問題なく動いて ちゃんと外部ライブラリのパスも通っているので単純に私のやり方が悪いんだろうなって判断ができました。

おそらくサンプルが無いとまだ迷っていた気がします。

初心者を惑わすVSの初回プロジェクト作成

VSを立ち上げるとどんなプロジェクトを作りますかとダイアログが出てきます。

そこで大体は空のプロジェクトから始めたりするのですが、 参考記事に沿ったりするとWindows用のプロジェクトを開始みたいに 別のやり方があったりしてわからないのでそれに沿ったりしていると 初期の設定状態が地味に変わっていたりでコンパイルが通らなかったり色々あります。

単純に私がわかっていないだけかもしれません(笑)

1年後この記事を見て自分がどう思うのか、 どう成長しているのかがすごく気になります。

パスが通らなかった原因は構成マネージャーの問題

Node.jsとかで開発しているとあんまり気にしないWIN32とかx64。

C++はコンパイルしないと動かない言語なので、 コンパイル前に動かすターゲットを決めておかないとコンパイルが出来ません。

今回ディレクトリの設定が問題ないのにパスが通らない!ってなってたのは プロジェクトのコンフィグではx64になっているけど構成マネージャーのボタンを押してみると その先で設定されているのがWIN32だったりしてちぐはぐな状態になってたのが原因でした。

使うライブラリがx64のものだったのでWIN32を指定してたのが原因だった気がします。

ここでちゃんとx64に指定しなおしたら今までの悩みが嘘のようにインクルードパスが通ったではありませんか。

Twitterで悩んでてツイートしててお師匠様に助言をいただこうとDMしたのですが DMして返答が返ってくる前に自己解決してしまったという感じです(笑)

こんな初歩的なこともできないようじゃ先が思いやられると 質問するのをためらってたのですが、「質問しておいで!」って言ってもらえるだけでも 頭の凝り固まったものをほぐしてくれるのでとても感謝しております。

お金を払っているならすぐさま聞きに行きますが、そうじゃないので 時間を奪ってしまうのは申し訳ないという考えが働いて聞きづらくなってしまうんですよね。

実際無償で時間を奪うわけですから。

数日悩んでも本当にわからないときに助け舟を出すぐらいに成長したいものです。

こうやって親切で教えてくれる方がいるというのは本当に幸せですね。

感謝しております。

インクルードパスを設定する箇所が2つある問題

VSのプロジェクトにカーソルを合わせてコンフィグを開くと VC++のディレクトリでインクルードパスを設定できたり、 C++の項目で追加のインクルードパスを設定できたりと何故か2つ設定するところがあります。

インクルードパスとはいわゆるヘッダファイルのある場所を指定する箇所です。

GLFWのときはVC++の方で設定して通ったのですが、 SDLのときはサンプルにはC++の方に設定してもいけてたのでちょっとよくわからないですね。

おそらくVC++(Visual C++)はWindows特有の直感的に作ることができるGUIアプリのやつ用で C++の方は純粋にコンソールから動かす時用ってことなのでしょうか……

これらに関してググろうとしても全然見当違いのものがでてきたりで 答えを得るのが難しい状態です。

こういったC++関連のググる力というのもまだまだついてない気がしますね。

そもそもこういった悩みを持つ人ってあんまりいないのかもしれません(笑)

パスなんて通って動けばいいじゃんって言う人がほとんどなんだろうと思います。

IDE特有の動きに解せないと先に進めないのは、 おそらく過去にC++をやったときにわからないのは無視して進んでその先で IDE特有の設定がわからず詰んだ経験があるからかも知れません。

でも今回その原因がよくわかってめちゃくちゃ脳がスッキリしました。

やっとコードの打ち込みに専念できそうです。