2012-09-10 8 views
10

CMakeを使ってビルドシステムを管理するのはかなり新しくなっているので、愚かで悪い考えであれば教えてください。CMakeのプロジェクト名としてディレクトリを自動的に使用する

私は

project(...) 

を行う際に、ディレクトリの名前が自動的にプロジェクト名となるように、私のcmakelists.txtファイルを設定できるようにしたいと思います。一つのプロジェクトのディレクトリ全体を別のプロジェクトの出発点としてコピーできるのが便利だと思うので、私はこれをしたいと思います。しかし、私はいつも何か意味のあるディレクトリに名前を変更しますが、cmakelists.txtファイルのproject(name)行を変更することを忘れてしまい、同じ名前のビルド環境で複数のプロジェクトが開いてしまい混乱します。

ディレクトリ名にスペースが含まれていると、理想的にはアンダースコアで置き換えられます。

これを行うことはできますか?私が見ていない何らかの理由で悪い考えですか?

答えて

8

あなたのCMakeLists.txtの先頭に以下を追加することでこれを実現することができます

get_filename_component(ProjectId ${CMAKE_CURRENT_SOURCE_DIR} NAME) 
string(REPLACE " " "_" ProjectId ${ProjectId}) 
project(${ProjectId}) 

私は生産プロジェクトが通常持っているだろうと思いますが、私は、使い捨てのプロジェクトのためにこれをやってに問題が表示されませんprojectコマンドで明示的に設定される定義済みの名前。

"あるプロジェクトのディレクトリ全体を別のプロジェクトの開始点としてコピーする"と言いますと、コピーするときにビルドツリーを含めないとしますか? CMake isn't really able to handle the build tree being moved

+0

ためCMAKE_CURRENT_LIST_DIRがより適切だと思います。 リンクをご覧ください:http://stackoverflow.com/questions/15662497/in-cmake-what-is-the-difference-between-cmake-current-source-dir-and-cmake-curr – Maks

+0

@Maks - A ['CMAKE_CURRENT_SOURCE_DIR'](https://cmake.org/cmake/help/v3.4/variable/CMAKE_CURRENT_SOURCE_DIR.html)は[' CMAKE_CURRENT_LIST_DIR']よりも適切です(https://cmake.org/ cmake/help/v3.4/variable/CMAKE_CURRENT_LIST_DIR.html)は、現在のプロジェクトに対してCMakeLists.txtが処理されているディレクトリを参照しているのに対し、 '... LIST_DIR'は' include'呼び出しで変更されます。 – Fraser

+1

これは私が別の作業ツリーで2-3の異なるブランチをチェックアウトし、QtCreatorでそれらの間で切り替えたいとき(例えば、ソースと実行を比較/比較する)に役に立ちます。また、同じプロジェクト名を持つべきであるにもかかわらず、プロジェクト名に基づいてプログラムで別の場所にビルドをデポジットすることができます。ローカルでは、公式のプロジェクト名と私のディレクトリ名を連結するかもしれません... – sage

1

私はあなたが別のディレクトリ内のディレクトリを持っている場合は、エラーが発生しますoverwiseあなたが代わりに$ {CMAKE_SOURCE_DIR}の$ {CMAKE_CURRENT_LIST_DIR}を使用する必要があります。この場合

get_filename_component(ProjectId ${CMAKE_CURRENT_LIST_DIR} NAME) 
string(REPLACE " " "_" ProjectId ${ProjectId}) 
project(${ProjectId} C CXX) 
関連する問題