2013-07-05 11 views
5

CMakeランタイム(file(COPY ...)configure_file(...)add_custom_command())でファイルやディレクトリをコピーする方法はたくさんありますが、どのように作成するかはまだわかりませんソースからビルドディレクトリにコピーされたファイルまたはディレクトリは、CPackによって生成されたアーカイブに表示されます。それは実際にそれにリンクされてインストールされますターゲットにコピーを結ぶように私はそれthis SO answerは、それを修正するだろうけれども:ファイルをコピーしてCPackアーカイブにコピーする

install(TARGET mytarget DESTINATION bin) 

私はfile()configure_file()コマンドが明らかにしていないことを認識しなかったのに対し、ターゲットに追加する方法。しかし、これはうまくいかなかった。下のような単純なCMakeLists.txtがあれば、アーカイブ内にすべてのファイル(exmapleディレクトリを含む)を表示させるにはどうしたらいいですか? (?ほとんど)

cmake_minimum_required(VERSION 2.6 FATAL_ERROR) 
enable_language(FORTRAN) 
add_executable(mytarget ${PROJECT_SOURCE_DIR}/myprog.for) 
install(TARGETS mytarget DESTINATION bin) 

add_custom_command(TARGET mytarget PREBUILD 
       COMMAND ${CMAKE_COMMAND} -E copy_directory 
        ${PROJECT_SOURCE_DIR}/examplefiles ${PROJECT_BINARY_DIR}/examplefiles) 

set(CPACK_GENERATOR "TGZ") 
include(CPack) 

*私はまだ正しいこれらの3つの方法のいずれかが実際にどの判明していない - ので、この上の任意のアドバイスはあまりにも巨大に

+0

バイナリ配布ではなく、*ソースパッケージ*の場合はどのように動作しますか? CPackソースパッケージジェネレータは、設定可能性がかなり制限されているようです。 – kynan

答えて

7

ように理解されるであろうのdocumentationで説明CPackモジュールによって作成されたバイナリインストーラには、CMakeのINSTALLコマンドでインストールされたものがすべて含まれています。したがって、installコマンドを使用してbinフォルダにコピーするため、この例の実行可能ファイルmytargetはCPackアーカイブに含まれます。またCPackを持って

が生成されたアーカイブでexampleフォルダを含めるには、次のようにinstall commandDIRECTORYバリアントを使用することができます。

install(DIRECTORY "${PROJECT_SOURCE_DIR}/examplefiles/" DESTINATION "example") 

file(COPY ...)configure_file(...)が何であるかには影響しません。 CPackによってインストールされます。両方のコマンドは、通常、CMakeプロジェクトの設定時に、ソースツリーからバイナリツリーにファイルをコピーするために使用されます。

add_custom_command${CMAKE_COMMAND} -E copy_directory ...とすると、プロジェクトのビルド時にファイルの実際のコピーが延期されます。ただし、CPackアーカイブにコピーしたファイルを含めることはできません。

+0

'install(DIRECTORY ...'完璧に感謝しました。 – ChrisW

関連する問題