見出し画像

CMakeで出力ファイル名をどうするか・・・悩む

CMakeでCMakeLists.txtを書くときは自分自身が add_subdirectory 関数で追加されたサブプロジェクト(と言うのか不明)なのか、呼び出された最上位のプロジェクトかどうかで動かなくなる事を避けている
簡単に言えば単体で動作確認後に上位のプロジェクトからadd_subdirectoryしてもらい全体に組み込んでいる
単体のテストなら a.outで十分。テスト完了後に削除している
問題は、複数のadd_subdirectoryされたプロジェクトが全部 a.out では困るという問題
簡単なソリューションとしては、一つ一つ手で別々の出力ファイル名を書いていく
あ~、想像しただけで面倒くさい

で、単体で動かすときは a.out
子プロジェクトとして動作するときはCMakeLists.txtの存在するディレクトリ名を出力ファイル名とする案(良いじゃないか!)
ここで自分が親なのか子なのかを判断する方法
CMAKE_SOURCE_DIR と CMAKE_CURRENT_SOURCE_DIRが一致したら
そうで無ければとした(良い案ではないか!)

# Get the directory name where CMakeLists.txt is located
get_filename_component(DIR_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)

# Set the project name
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
    project(a.out VERSION 0.0.1)
else()
    project(${DIR_NAME}.out VERSION 0.0.1)
endif()

コードは簡単なのでproject関数の宣言の所で差し替えればOK
get_filename_componentは、else()以降に書いていないのは、もしかしてどこかでディレクトリ名を使うかもしれないので先頭に書いている

この記事が気に入ったらサポートをしてみませんか?