2011-12-26 12 views
6

Tôi có một cái gì đó như thế này trong dự án của tôi:Hoãn làm mục tiêu tùy chỉnh cho đến khi cài đặt

add_custom_command(OUTPUT somefile) 
add_custom_target(tgt ALL DEPENDS somefile) 

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir) 

này hoạt động OK, nhưng lệnh của tôi đang được chạy trong makeALL từ khóa trong add_custom_target(). Những gì tôi muốn là làm cho CMake chạy lệnh này chỉ khi make install được phát hành, không phải trong quá trình xây dựng.

Nếu tôi xóa TẤT CẢ từ khóa, toàn bộ mục tiêu không được tạo theo mặc định, do đó, một số tệp không được tạo và make install không thành công.

Trả lời

8

Một giải pháp có thể có là lệnh make install gọi hiệu ứng phụ là make tgt. Điều này có thể được thực hiện bằng cách sử dụng các CODE chữ ký của lệnh install:

add_custom_command(OUTPUT somefile) 
add_custom_target(tgt DEPENDS somefile) 

install(CODE "execute_process(COMMAND \"${CMAKE_COMMAND}\" --build \"${CMAKE_CURRENT_BINARY_DIR}\" --target tgt)") 
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/somefile DESTINATION somedir) 

Các execute_process gọi cmake để xây dựng các mục tiêu tgt trước somefile được cài đặt.

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