2013-03-29 30 views
11

Tôi đang cố cung cấp một số tệp "nguồn" với một số tệp thi hành. Tôi đã tự hỏi nếu có một cách để sao chép các tập tin nguồn vào thư mục xây dựng (Từ thư mục nguồn) sau đó vào thư mục cài đặt bằng cách sử dụng cmake.Cài đặt các tệp bổ sung với CMake

Mục tiêu cụ thể hơn của tôi ở đây là bao gồm hạt nhân OpenCL mà tôi viết trong tệp * .cl của riêng mình.

Ví dụ:

mkdir build 
cd build 
cmake .. 
make 

Bây giờ thư mục của tôi nên có một thực thi (cmake tiêu chuẩn) và some_opencl_kernel.cl mà tôi mở trong thực thi của tôi. TIA

Trả lời

12

Bạn có thể sao chép các tập tin để xây dựng cây của bạn sử dụng add_custom_command bằng cách thêm một cái gì đó như sau:

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> 
        ) 

này thêm một sự kiện sau xây dựng với mục tiêu của bạn (tôi đã gọi nó là MyExe) mà các bản sao tệp src/some_opencl_kernel.cl vào cùng một thư mục trong cây xây dựng của bạn làm exe.

Có nhiều cách khác để sao chép tệp vào cây xây dựng, nhưng tôi thích cái này vì nó sử dụng "biểu thức máy phát" $<TARGET_FILE_DIR:MyExe> để xác định vị trí thư mục của exe trong cây xây dựng. Điều này có thể khác nhau tùy thuộc vào ví dụ: xây dựng kiểu hoặc nền tảng, do đó, biểu thức máy phát điện là về cách đáng tin cậy nhất, đa nền tảng của việc xác định vị trí này tôi cảm thấy.

Để cài đặt, bạn chỉ có thể sử dụng lệnh install(FILES ...). Giả sử cho exe của bạn, bạn có cái gì đó như

install(TARGETS MyExe RUNTIME DESTINATION bin) 

bạn chỉ có thể thêm:

install(FILES src/some_opencl_kernel.cl DESTINATION bin) 

mà sẽ cài đặt nó để ${CMAKE_INSTALL_PREFIX}/bin/some_opencl_kernel.cl cùng với exe.

+0

Fraser Tôi thực sự đánh giá cao điều này, tôi đã tự hỏi nếu bạn có bất kỳ suy nghĩ nào về việc sử dụng 'configure_file' với' COPYONLY'? – Constantin

+0

Điều đó làm việc quá và là tùy chọn dễ nhất nếu bạn không sao chép vào thư mục xây dựng nơi exes/libs đang được đặt, hoặc nếu thư mục đó là cố định. Ví dụ: MSVC nối thêm thư mục "Gỡ lỗi" vào ['RUNTIME_OUTPUT_DIRECTORY'] (http://www.cmake.org/cmake/help/v2.8.10/cmake.html#prop_tgt:RUNTIME_OUTPUT_DIRECTORY) cho các bản dựng Gỡ lỗi. Nếu bạn không bao giờ sử dụng trình tạo nhiều cấu hình, đây có thể không phải là vấn đề cho bạn và 'configure_file' sẽ là một tùy chọn đơn giản hơn. – Fraser

8

Nếu bạn muốn sao chép cây thư mục với một số loại tập tin:

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

Nếu bạn muốn sao chép tất cả các file trong thư mục, chỉ cần loại bỏ mô hình FILES_MATCHING

Các vấn đề liên quan