2016-05-27 16 views
3

私はちょうどcmakeを使い始めています。私はいくつかのチュートリアルを読んで基本的なものを作っています。cmake * .cppルールを使ってMakefileを作成する

現在、私のCMakesList.txtは、明示的に名前が付けられたすべての.cppを持つMakefileを生成します。つまり、プロジェクトに新しい.cppを追加するたびに、私が作ることができる前に、cmakeを再実行する必要があります。これは大きな問題ではありませんが、まだ少し迷惑です。

のMakefileがSOURCES=*.cppような何かを行うことができますので、私は、このようなルールでMakefileを生成するためにcmakeのを指示する方法はおそらくありますと思いました!

私は

cmake_minimum_required(VERSION 2.8) 
file(GLOB SRC 
    "*.h" 
    "*.cpp" 
) 
add_executable(main ${SRC}) 

を行うことができます知っているが、それと私はまだcmakeのを再実行する必要があります。

+0

ソースに '* .h' sを追加しているのはなぜですか? –

+1

このようにIDEで生成されたプロジェクトファイルはヘッダーも持つためです。 – GameDeveloper

+0

申し訳ありません、私はちょうどいくつかのstackoverflowスレッドから貼り付けたコピーします。私は、代わりにinclude_dirとしてヘッダファイルを含むフォルダを追加するべきだと思います。 –

答えて

3

私が知る限り、それを行う方法は、あなたが言ったように、そして、あなたがファイルを追加するたびにcmakeを実行しなければならないという欠点です。

私が通常これを克服するのは、cmakeを呼び出すカスタムターゲットを作ることです。それはあなたがmake updateを呼び出すことができ、それはすべてのファイルをキャプチャして、ビルドプロセスを開始する最初のcmakeのを呼び出します。これにより、この

ADD_CUSTOM_TARGET(update 
    COMMAND ${CMAKE_COMMAND} ${CMAKE_SOURCE_DIR} 
    COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target all 
    COMMENT "Cmake and build" 
) 

のようになります。

+1

ありがとう、多少の回避策が、まだ素晴らしいソリューションです! –

+0

ようこそ。これは私が自分の使い方を思いつくための最高のものです。これは実際にはかなりいいです。たとえば、デバッグとリリースを切り替える場合は、2つのカスタムターゲットを追加することで同じことができます。 – Ashkan

2

CMakeは、CMakeがCMakeLists.txtを一度コンパイルしてから、より性能の高いキャッシュ中間フォーマットを生成するため、ファイルを変更した場合にのみ再実行する必要があります。 (新しいファイルを追加しない場合は、makeコマンドを実行するだけです)。

CMakeはMakefileの同等の機能を使用できないことに注意してください。 CMakeは、Makefileだけで動作するようには設計されていないため、ターゲットビルドスクリプトの一部の機能しか使用しません。

また、既にCMakeを直接使用している場合は、Makefileを持っていてもCMakeを持っていないクライアントにプロジェクトを出荷する必要がある場合に限り、makefileの生成、CMakeの使用、makefileの生成は必要ありません。

+0

さて、私がやりたいことはできませんよね?私はちょっと混乱していますが、私はcmakeがMakefileを生成すると思っていましたが、私はまだそのファイルを使ってビルドする必要がありました。私はcmakeをプロジェクトの構築に直接使うことができると言っていますか? –

+0

Makefileを生成することはできますが、makeファイルは自動的に更新されず、何か重要な変更(Cmakeスクリプトの変更やファイルがGLOBに追加された場合)を行った場合にmakefileを再生成する必要があります。世代は互換性のために、 '--build'指示文で直接Cmakeを使うことができます。 – GameDeveloper

+1

ありがとう、ありがとう。それから、SublimeTextにmingw32-makeの代わりにcmake --buildを使うようにすることができます。 –

関連する問題