空飛ぶ気まぐれ雑記帳

主に趣味とかプログラミングについて扱います。

Visual Studioユーザーに送るCMakeテクニック☆ (1)

はじめに

今月忙しすぎてブログの更新が滞っていたので、暫くごまかしのためにCMakeのテクニックを紹介します。
なお、未だに忙しくて録に記事が書ける状態ではないので記事は分割してますが、悪しからず。

決して当初掲げていた週一更新の分を一気に放出しようとしているわけではありません

それはさておき、今日紹介するのはVisual Studioが有するフィルタリング機能をCMakeから利用するにはどうすれば良いのか?
という話です。

フィルタリング機能って

Visual Studioでプロジェクトを右クリックしてでてくるポップアップメニューの Add > New Filterで出てくるアレです。
デフォルトでも、Source filesやHeader files(日本語版だとソースファイルとヘッダーファイルかな?)というものが設定されているかと思います。

このフィルタリング機能ですが、これがないとソースファイルの数が100近くなると非常に見づらくなるので、どっぷりとVisual Studioを使っている方は間違いなく利用しているかと思います。

これをCMakeを使ってソリューションファイルを生成するとデフォルトのSource filesやHeader filesのフィルタリングすらないため、非常に不便ですよね。

フィルタリングを有効にする

下記コマンドを実行すればフィルタリングが有効になります。
なお、デフォルトでSource filesとHeader filesが設定され、振り分けられます(久しくデフォルトの挙動を確認していないので不安ですが…)。

SET_PROPERTY(GLOBAL PROPERTY USE_FOLDERS ON) 

もし、これをONにしない場合、以下で説明している設定をしても反映されないので注意しましょう

ソースファイルをフィルタリングしたいとき

ソースファイルをフィルタに分類する場合、下記コマンドを実行すればOKです。

SOURCE_GROUP("任意のフィルタ名" FILES <ソースコードのファイルパス> ...)

なお、もしフィルタをネストする場合、例えば Source files > hoge > huga > hage.cpp のような階層構造を持たせたい場合、フィルタ文字列をバックスラッシュ2つ(文字列内の場合バックスラッシュをエスケープする必要がある?)並べる必要があります。

SOURCE_GROUP("Source files\\hoge\\huga" FILES hage.cpp)

のようになります。

プロジェクトをフィルタリングしたいとき

プロジェクトの場合ソースコードとは違う方法でフィルタリングを行います(フィルタリングのフォーマットは同じ)

SET_TARGET_PROPERTIES(<プロジェクト名(ターゲット名)> PROPERTIES FOLDER "任意のフィルタ名")

ここで注意しなければならないのが、ターゲットを対象としてフィルタリングするため、add_executable or add_library or add_custam_target etc... でターゲットを生成した後に呼び出す必要があるという所。

おわりに

ざっくりとCMakeを使ったフィルタリングの使い方を説明しました。
次回以降も個人的に知ってて便利だな―と思ったCMakeの使い方を説明していくつもりです。

なお、全五回くらいになる予定していますそんなにネタがあるか微妙ですが