error人生は試行錯誤の連続。C++,CMakeTwitterFacebookB!HatenaLINELINECopy前々回の記事(CMakeを使ってビルドする(1))では、プロジェクト直下にのみソースファイルが存在するケースを用いて、基本的なCMakeLists.txtの書き方をまとめました。プロジェクトが大きくなると多数のサブディレクトリが作られ、その中にソースファイルが配置されることも多くなってきます。今回は、そのようなサブディレクトリが存在するケースについて、CMakeLists.txtの書き方をまとめてみました。単純なケースでのCMakeLists.txtの書き方はこちら。...https://izadori.net/entry/cmake_1Generator-Expressionsについてはこちら。今回は以下のようなプロジェクトのディレクトリ直下にソースファイルとサブディレクトリfunc1が置かれているケースを考え、main.cppとfunc1/func1.cppからtest1をビルドするとします。(ビルド用のディレクトリ)CMakeLists.txtはディレクトリに1つ必要なので、ルートディレクトリの他にfunc1の中にも作成しておきます。func1.cpp)CMakeLists.txt3行目のadd_subdirectory()ここでfunc1以下をビルドの対象に加えます。次のような書式で記述します。対象に加えたディレクトリにもCMakeLists.txtが必要です。[EXCLUDE_FROM_ALL])EXCLUDE_FROM_ALLはデフォルトターゲット(all)から除外するときに指定します。CMakeLists.txt5行目のtarget_link_libraries()add_executable()で作成した実行ファイルにライブラリをリンクします。次のような書式で記述します。INTERFACEのキーワードはオプションの有効な範囲を示すために使われます。ターゲット自身に有効な設定の場合にはPRIVATEかPUBLICを、ターゲットに依存する他のターゲットに有効なものはINTERFACEかPUBLICを指定します。詳細は公式ドキュメントを参照してください。target_link_librariesfunc1/CMakeLists.txt2行目のadd_library()ライブラリファイルを作成します。次のような書式で記述します。...)作成するライブラリの種類によってSTATIC,SHARED,MODULEのキーワードを切り替えます。*.dllなど)を簡単に切り替えられる点です。各キーワードの違いについて以下にまとめました。必要な時にロードする動的ライブラリ詳細は公式ドキュメントを参照してください。test1このようにライブラリ(libfunc1.a)が生成された上で、test1.exeがビルドされています。上記の方法で困ることは少ないと思いますが、ライブラリが必要ないのにもかかわらず、いちいちライブラリを作成するのがムダと思うこともあります。通常このような場合は、オブジェクトファイルを直接リンクするはずです。CMakeでこれを実現するにはどうすればよいのでしょうか。オブジェクトライブラリCMakeには「オブジェクトライブラリ」というものがあり、オブジェクトファイルを直接リンクする場合には、これを使用します。ライブラリと名前がついていますが、ライブラリファイルは生成せず、CMake上でオブジェクトファイルのリストをライブラリのように扱えるようにする機能です。実際に作成したCMakeLists.txtとfunc1/CMakeLists.txtを見てみます。func1.cpp)CMakeLists.txt4行目のadd_executable()ここでGenerator-Expressionsがでてきました。$<TARGET_OBJECTS:オブジェクトライブラリ名>とすることで、オブジェクトライブラリに設定されたオブジェクトファイルのリストを得ることができます。func1/CMakeLists.txt2行目のadd_library()add_library()にOBJECTをつけることで、指定されたソースから生成されるオブジェクトファイルのリストをオブジェクトライブラリとして扱えるようになります。詳細は公式ドキュメントを参照してください。test1確かにライブラリが作成されていません。出力もスッキリしています。まとめ今回は、プロジェクトのディレクトリ内にさらにサブディレクトリが存在するケースに対応するCMakeLists.txtの書き方についてまとめると以下のようになります。...【C++】【Eigen】Gauss-Newton法を実装する観測データをあるモデルで回帰する場合に、最小二乗法がよく使われます。...当サイトは「さくらのVPS」上で動作しています。コメントをキャンセルメールアドレスが公開されることはありません。次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。