web-dev-qa-db-ja.com

CMakeで追加ファイルをインストールする

いくつかの実行可能ファイルを含むいくつかの「ソース」ファイルを提供しようとしています。これらのソースファイルを(ソースディレクトリから)ビルドディレクトリにコピーしてから、CMakeを使用してインストールディレクトリにコピーする方法があるかどうか疑問に思いました。

ここでの私のより具体的な目標は、独自の* .clファイルに書き込むOpenCLカーネルを含めることです。

例:

mkdir build
cd build
cmake ..
make

これで、ディレクトリに実行可能ファイル(標準のCMake)とsome_opencl_kernel.clが含まれているはずです。これを実行可能ファイルで開きます。

17
Constantin

_add_custom_command_ を使用して、次のようなものを追加することにより、ファイルをビルドツリーにコピーできます。

_add_custom_command(TARGET MyExe POST_BUILD
                   COMMAND ${CMAKE_COMMAND} -E copy_if_different
                       ${CMAKE_CURRENT_SOURCE_DIR}/src/some_opencl_kernel.cl
                       $<TARGET_FILE_DIR:MyExe>
                   )
_

これにより、ビルド後のイベントがターゲット(私はMyExeと呼びます)に追加され、ファイル_src/some_opencl_kernel.cl_がビルドツリーの実行可能ファイルと同じディレクトリにコピーされます。

ファイルをビルドツリーにコピーする方法は他にもさまざまですが、ビルドツリー内の実行可能ファイルのディレクトリの場所を識別するために「ジェネレータ式」_$<TARGET_FILE_DIR:MyExe>_を使用するため、これが好きです。これは、たとえば、ビルドタイプまたはプラットフォームなので、ジェネレータ式は、私が感じるこの場所を指定するための最も信頼性の高い、クロスプラットフォームの方法です。

インストールに関しては、 install(FILES ...) コマンドを使用するだけです。実行可能ファイルについて、次のようなものがあると仮定します。

_install(TARGETS MyExe RUNTIME DESTINATION bin)
_

あなたはただ追加することができます:

_install(FILES src/some_opencl_kernel.cl DESTINATION bin)
_

これにより、実行可能ファイルと一緒に_${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl_にインストールされます。

24
Fraser

ある種のファイルを含むフォルダのツリーをコピーする場合:

  # Copy all assets to resources file
  INSTALL(DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/assets/ DESTINATION ${INSTALL_PATH}/assets
          FILES_MATCHING PATTERN "*.dae"  PATTERN "*.jpg")

フォルダ内のすべてのファイルをコピーする場合は、FILES_MATCHINGパターンを削除するだけです。

16
vgonisanz