2013-03-29 117 views
11

我正在嘗試爲一些可執行文件提供一些「源」文件。我想知道是否有辦法將這些源文件複製到構建目錄(從源目錄),然後使用cmake複製到安裝目錄。使用CMake安裝其他文件

我的更具體的目標是包含我在自己的* .cl文件中編寫的OpenCL內核。

例子:

mkdir build 
cd build 
cmake .. 
make 

現在我的目錄應該有一個可執行文件(標準的cmake)和some_opencl_kernel.cl,我在我的可執行文件打開。 TIA

回答

12

您可以通過添加類似下面的文件複製到使用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複製到構建樹中與您的exe相同的目錄中。

將文件複製到構建樹中有各種其他方法,但我喜歡這個,因爲它使用「生成器表達式」$<TARGET_FILE_DIR:MyExe>來標識構建樹中exe文件的位置。這可以根據例如構建類型或平臺,所以生成器表達式是指定我感受到的這個位置的最可靠的,跨平臺的方式。

至於安裝,您可以使用install(FILES ...)命令。假設你的EXE您有類似

install(TARGETS MyExe RUNTIME DESTINATION bin) 

你可以添加:

install(FILES src/some_opencl_kernel.cl DESTINATION bin) 

將它安裝到${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl旁邊的exe文件。

+0

弗雷澤我非常欣賞這一點,我想知道如果你對使用'configure_file'和'COPYONLY'有什麼想法? – Constantin

+0

如果您不復制到正在放置exes/libs的構建目錄,或者如果該目錄是固定的,那麼也可以工作,並且是最簡單的選項。例如,MSVC將「Debug」目錄附加到['RUNTIME_OUTPUT_DIRECTORY'](http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:RUNTIME_OUTPUT_DIRECTORY)以供調試版本使用。如果你永遠不會使用多配置生成器,這對你來說可能不是問題,'configure_file'會是一個更簡單的選擇。 – Fraser

8

如果要複製文件夾樹與某些類型的文件:

# 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模式