親スコープで使用する便利なマクロを定義するCMakeLists.txt
を作成します。私はマクロをうまく使うことができます。しかし、私は${CMAKE_CURRENT_SOURCE_DIR}
を使用しました。残念ながら、マクロが定義されているCMakeスクリプトのディレクトリではなく、呼び出されたディレクトリです。私がそれを変える方法はありますか?私が見つけたCURRENT_SOURCE_DIRを使用するsub_directoryにcmakeマクロを定義する方法は?
MWE
cmake_minimum_required(VERSION 3.6)
project(git_info CXX)
macro(do_stuff)
message("This CMakeLists.txt file is in ${CMAKE_CURRENT_SOURCE_DIR}")
endmacro()
一つ醜いの方法は、パスが含まれており、マクロでそれを使用して、親スコープに変数をエクスポートすることでした。しかし、私は可能な限り、マクロ定義をエクスポートして、物事をきれいに保つことを望んでいます。
編集: 少し明確にする。私はトップレベルのCMakeLists.txt
と上記のMWE CMakeLists.txt
で1つのフォルダ(my_folder
)を持つ1つのフォルダを持っています。次のようにトップレベルCMakeLists.txt
に見えます:
cmake_minimum_required(VERSION 3.6)
project(top_project CXX)
add_subdirectory(my_folder)
do_stuff()
これは、マクロがparent_scopeで呼び出されるので、 '_my_marcros_file'はマクロが定義されている場所から見えません。したがって、印刷されたメッセージは( "このCMakeLists.txtファイルは")です。 – NOhs
質問に明確な説明を追加しました。 – NOhs
しかしそれは逆です。親スコープで子スコープで定義されたマクロを使用したいと思います。これはうまくいきますが、子スコープの変数を親スコープに表示させたくありません。 – NOhs