2010-11-19 19 views
5

私のプロジェクトでは、ヘッダファイルを生成するために書いた "スキーマ"ファイルとユーティリティがあります。 私はアプリケーションをビルドするためにcmakeとソース外のビルドを使用しています。cmakeをソースにヘッダを生成する方法は?

現在、私は手作業でヘッダファイルを再生成し、アプリケーションをビルドする必要があります。

私はこのCMakeLists.txtステートメントを思いついたが、ソースディレクトリの代わりにビルドディレクトリにヘッダーを生成します。

configure_file(generator.pl generator COPYONLY) 
configure_file(schema.txt.in schema.txt COPYONLY) 
add_custom_command(
    OUTPUT generated.h 
    COMMAND ./generator schema.txt generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

ソースディレクトリにヘッダを生成することはできますか?

編集(答えを反映するために):に、

ので
${CMAKE_CURRENT_BINARY_DIR} 

ファイルが完全に

${CMAKE_CURRENT_SOURCE_DIR} 

かのいずれかでそのパスを修飾することにより、直接到達することができます私のソースディレクトリにヘッダを生成すると、CMakeLists.txtの前の抜粋は次のようになります:

実際にはより簡単な
add_custom_command(
    OUTPUT generated.h 
    COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generator.pl ${CMAKE_CURRENT_SOURCE_DIR}/schema.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/generated.h 
    DEPENDS mib_schema.txt.in generator.pl 
    COMMENT "Regenerating header file..." 
) 

です。 おかげ

+0

これは実際には良いアイデアです。生成されたファイルをソースディレクトリに保存することができれば、ソースパッケージに含まれています。私のライブラリのユーザは、ジェネレータを変更しない限り、ファイルを生成する必要はありません。 /またはソースデータファイル)。これは、より多くの人々が私の図書館をコンパイルできることを意味します! –

答えて

5

--to

は、私はあなたが生成された別のヘッダが生じ、同じソースと異なる構成でディレクトリを構築するために作成することもできますので、生成されたヘッダがよく、バイナリのディレクトリに配置されていると思います。

あなたのプロジェクトにビルドディレクトリを含めることができます:

include_directories(${CMAKE_CURRENT_BINARY_DIR}) 
+0

CMakeがファイルを見つけられない場合は、 '$ {CMAKE_CURRENT_BINARY_DIR}'で完全修飾してください。ソースディレクトリにファイルを作成したい場合は、 'configure'と' add_custom_command'コマンドで '$ {CMAKE_CURRENT_SOURCE_DIR}'を使うこともできます。 – tibur

+0

私は、生成されたファイルの最適な場所がビルドディレクトリにあることに同意します。 このヘッダーは、コーディング中に便利なコード補完を行うため、ソースディレクトリで便利です。 すべてのビルド構成で同じヘッダーであるため、ソースディレクトリにあることはまったく問題になりません。 NB:コメントを編集する際に問題が発生している可能性があります。おそらく、私は大規模なネットワーク上で一意のIPで動作しているからです。混乱させて申し訳ありません。 – amso

関連する問題