2016-07-26 28 views
4

ビルドタイプ(リリース、デバッグなど)に応じてCMake出力のlibとbinを取得する方法を知っていますが、コンパイル時間を短縮するためにCMakeにそれらを異なるサブフォルダでビルドさせること。CMakeで異なるビルドタイプのビルドツリーを作成する

は私が木

|- CMakeLists.txt 
|- build/ 
|- src/ 

のこの種を持っていると言う私は、デバッグ、リリース、およびrelwithdebinfoビルドを持っている場合、私はCMakeのは、自動的に私に

|- CMakeLists.txt 
|- build/ 
|--- Debug/ 
|--- Release/ 
|--- RelWithDebInfo/ 
|- src/ 

などのようなツリーを作成します。 これが可能ですか?はいの場合、どのように目標を達成できますか?

ビジュアルスタジオでは、これが複数のソリューションなどにつながるので、私は "あなたは別のフォルダからCMakeを実行する必要があります"という回答は望ましくありません。 CMakeを1つのフォルダから実行できるようにしたいサブフォルダを単独で処理します。

+0

**ビルドツリー全体を異なるビルドタイプの異なるディレクトリに作成したいですか?しかし、ビルドファイルのほとんどがすべての設定に共通で、出力(実行可能ファイル、ライブラリ)のみが設定ごとになっている場合、これはVisual Studioのマルチ設定の性質と真の矛盾します。 – Tsyvarev

+0

私は、生成されたオブジェクトファイルを別々のディレクトリ(例えば、Linuxの.o)に入れたいと思います。プロジェクトファイルは共通です。 – Zouch

+0

これと 'mkdir build/Release && cd build/Release && cmake ../ ..'との間に違いはありますか? – Zouch

答えて

2

CMakeだけを残しておくと、複数の設定(Visual Studioなど)をサポートするジェネレータで自動的にCMakeが実行されます。

デフォルトの出力場所をオーバーライドする場合は、あなたがgenerator expressionsをサポート*_OUTPUT_DIRECTORYターゲット・プロパティを介してそうする必要があります。

set_property(TARGET my_lib 
    PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/$<CONFIG>/bin) 

設定の名前に展開されます$<CONFIG>ジェネレータ式、(デバッグを注意してください、リリースなど)。

このプロパティは、どのライブラリターゲットにディレクトリを指定します:あなたが設定ディレクトリは、ディレクトリツリーの最下部になりたい場合は、あなたも明示的にジェネレータ式を与える必要はないかもしれないということ

も注意ファイル を作成する必要があります。プロパティー値はジェネレーター式を使用することができます。 マルチコンフィギュレーションジェネレータ(VS、Xcode)は、ジェネレータ式 が使用されていない限り、コンフィギュレーションごとに サブディレクトリを指定のディレクトリに追加します。

出力ディレクトリを制御する3つのプロパティはARCHIVE_OUTPUT_DIRECTORYLIBRARY_OUTPUT_DIRECTORYRUNTIME_OUTPUT_DIRECTORYです。 This pageはその違いを説明します。

また、pdbのデバッグシンボルを使用してビルドする場合は、PDB_OUTPUT_DIRECTORYを設定することもできます。

冒頭で述べたように、これはすべて複数の設定をサポートするジェネレータにのみ当てはまります。 Makefileのようなシングルコンフィギュレーションのジェネレータの場合、状況は異なります。ここでは、CMakeの実行時にコマンドラインまたはcmake-guiのCMAKE_BUILD_TYPE変数を設定することによって、特定の設定を解決する必要があります。設定を切り替えるには、その変数の設定を変更してCMakeを再実行する必要があります。

これらのジェネレータは、同時に複数の構成をサポートしていません。したがって、シングルコンフィグジェネレータを使用していて、デバッグビルドとリリースビルドの両方が定期的に必要であることがわかっている場合は、別々のビルドディレクトリを別々の設定に保ち、それぞれ別々にcmakeを実行するのが最善です。

+0

もし私が正しいのであれば、これはCMakeにライブラリとバイナリを別のフォルダに出力するように要求することです。これは私が探しているものではありません(すでに使用しています)。私はビルドの種類に応じて異なるサブフォルダにビルドされたファイルを持っています(ビルドターゲットを変更したときにすべてを再コンパイルするのを避けるため) – Zouch

+0

@Zouch CMakeは異なる設定のオブジェクトファイルを混在させません。 。ここでどのような種類のファイルについて話していますか? – ComicSansMS

+0

コンパイルタイプを変更すると、ソースに全く触れていなくても、すべてのソースを再コンパイルすることを意味するので、何かが分かれているかどうかはわかりません。 – Zouch

関連する問題