階層構造になったcmakeプロジェクトのコンパイルにはadd_subdirectory


こんな感じのプロジェクトがあったときに

- AAA --- bbb.cpp
        |
        |- CMakeLists.txt (1)
        |
        |- CCC --- ddd.cpp
                 |
                 |- CMakeLists.txt (2)

ddd.cppをコンパイルして作ったライブラリファイルをbbb.cppにリンクして使いたい場合は、(1)の中に以下のように書いてやるとうまくいく。

CMakeLists.txt(1)
include_directories(CCC)
add_subdirectory(CCC)

こうしておくと、CCC内に出来る予定のライブラリファイルをリンクしようとするときに、後のtarget_link_libraryでライブラリが生成されるまで待ってくれる。

※ link_directoryとかを使うとCCCディレクトリ内のコンパイルが終わる前にリンクしようとしたりしてハマって不幸になるので注意