2012-02-06 34 views
12

Tôi gặp vấn đề sau khi sử dụng cmake. Tôi sử dụng UseDoxygen từ http://tobias.rautenkranz.ch/cmake/doxygen/ để tạo tài liệu cho thư viện của mình. Điều này hoạt động tốt, nhưng biết tôi muốn nhận ra những điều sau đây: Khi tôi gọi "make install", tôi muốn xây dựng để Tài liệu và cài đặt nó quá. Do đó, tôi thêmCMake thêm sự phụ thuộc vào mục tiêu cài đặt

install(DIRECTORY ${DOXYFILE_OUTPUT_DIR}/${DOXYFILE_HTML_DIR} DESTINATION share/doc/mylib/) 
add_dependencies(install doc) 

vào CMakeLists.txt của tôi. Điều này dẫn đến lỗi:

CMake Error at CMakeModules/UseDoxygen.cmake:145 (add_dependencies): 
    add_dependencies Adding dependency to non-existent target: install 
Call Stack (most recent call first): 
    CMakeLists.txt:141 (include) 

Có thể giải quyết dễ dàng cho việc này không? Bởi vì nếu các mục tiêu không được kết nối, bước cài đặt sẽ không cài đặt gì trừ khi "thực hiện doc" được thực hiện thủ công trước khi gọi "make install".

liên quan Grisu

+1

Xem câu trả lời cho [câu hỏi này] (http://stackoverflow.com/questions/8636479/postpone-making-custom-target-until-install/8643015#8643015). – sakra

Trả lời

6

Chúng tôi xây dựng tài liệu hướng dẫn của chúng tôi bằng cách thêm nó với add_custom_target với các tùy chọn ALL quy định do đó nó được xây dựng với mục tiêu all.

Sau đó, để cài đặt, nó chỉ là lệnh install. Không cần thêm bất kỳ thứ gì vào mục tiêu install.

Nếu bạn thêm tài liệu vào mục tiêu all, sau đó thực hiện make install cũng sẽ tạo tài liệu.

+0

Điều này hoạt động tốt. Tôi đã đạt được thứ tự đúng (tài liệu sau khi xây dựng) bằng cách sử dụng một add_dependencies bổ sung. –

+0

Điều này cũng hoạt động đối với các mục tiêu nội trang khác như 'gói' hoặc 'cài đặt'. –

1

Tài liệu xây dựng qua add_custom_target (ALL ...) không phải là giải pháp lý tưởng, vì nó có nghĩa là tài liệu được xây dựng dư thừa cho tất cả cấu hình (Debug, Release, RelWithDebInfo, MinSizeRel).

Tôi muốn xây dựng tài liệu một lần bất kể cấu hình xây dựng, sau đó sử dụng tùy chọn CONFIGURATIONS của lệnh install() để cài đặt nó chỉ cho các cấu hình Release và RelWithDebInfo. install() nên phụ thuộc vào mục tiêu tài liệu nhưng, như tôi đã nói, chỉ xây dựng nó cho một cấu hình. Dường như không phải là cách thêm phụ thuộc từ install() vào tài liệu đáp ứng các yêu cầu này.

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