CLionを使うときのCMakeList.txtの書き方,フォルダ分けの方法

備忘録

CLionを使うときにおそらくぶつかる壁がCMakeだと思う. Makefileは書けるけどCMakeList.txtなんて知らないよ!

こんな感じになったので,調べて,書きました.


フォルダ分けについて

Clionはプロジェクト単位でソースを管理しています.

一つのディレクトリに全てのソースを置いてもいいのですが,後々管理が大変になるので,実行単位ごと(学生なら課題ごとも可)でディレクトリを分けましょう.ディレクトリで分けることでbuildも簡単になりますし,見通しも良くなります.

実際の作業

まずサブディレクトリを作りましょう.

サブディレクトリを作ってもツリービューの名前が灰色のままだと思います.そこで次にメインのCMakeList.txtにこのサブディレクトリを認識するよう記述しましょう.

cmake_minimum_required(VERSION 3.7)

project(untitled)

set(CMAKE_CXX_STANDARD 11)

set(SOURCE_FILES main.cpp sample.cpp sample.h)

add_executable(untitled ${SOURCE_FILES})

add_subdirectory(ex1)

このadd subdirectory(…)でサブディレクトリを追加できます.今回はディレクトリ名がex1のものです.

ここで終わればよいのですが,まだもう少し.

これで保存しようとするとエラーダイアログが出現します.どうやらサブディレクトリにもCmakeList.txtが必要なようです.書きましょう.

cmake_minimum_required(VERSION 3.7)

project(ex1)

set(SOURCE_FILES ex1.cpp)

add_executable(${PROJECT_NAME} ${SOURCE_FILES})

書きました.

ソースファイルはいちいちこのように書かないとCLionが認識できないようです.

マクロを使ってうまいことやれたらいいのになぁ.


追記 OpenCVをCLionで使うときの設定の注意点

OpenCVを使うときはライブラリを追加して上げる必要があります.

MakeList.txtに記述しましょう.

追加するときに使うコマンドは

find_package( OpenCV REQUIRED )

target_link_libraries( DisplayImage ${OpenCV_LIBS} )

です.(Using OpenCV with gcc and CMake — OpenCV 2.4.13.2 documentation参照)

ですが,場所に注意する必要があります.

上のfind_packageは(多分)

add_executable(untitled ${SOURCE_FILES})

の前に,下の

target_link_libraries( DisplayImage ${OpenCV_LIBS} )

は必ず

add_executable(untitled ${SOURCE_FILES})

の下に配置する必要があるのです.

ここで地味につまりました.

ちなみに

include_directories(${OpenCV_INCLUDE_DIRS}) をterget_link_librariesの前に入れるべきかもしれません.

正直CLionがMakefile対応してたらもっと多くの人が使う気がする…