2011-07-15 32 views
13

Tôi đã thất vọng bởi CMake-CPack trong gần một tuần.Đường dẫn cài đặt gói CMake-CPack Nightmare

Điều xấu là tài liệu trực tuyến CMake-CPack không ghi lại phần này tốt.

Sau khi googling, tôi thấy biến này để sử dụng:

CPACK_PACKAGING_PREFIX   # NOT documented 
CMAKE_INSTALL_PREFIX   # Documented, but the behavior seems weird 
CPACK_INSTALL_PREFIX   # NOT documented 
CPACK_PACKAGE_INSTALL_DIRECTORY # Documented, but this variable does NOT work as the online document described 
CPACK_PACKAGING_INSTALL_PREFIX # NOT documented 

Những gì tôi đang cố gắng làm là: gói một gói Debian sử dụng fakeroot make package, khi gói được cài đặt bởi sudo dpkg -i MyProgramPackageName, cài đặt nó để /usr/local, với một thư mục con MyProgramPackageName. Tức là, tất cả các tệp phải được cài đặt theo /usr/local/MyProgramPackageName-V.1.2.3.

Tôi đã cố gắng (CMake 2.8.3 và CMake 2.8.5) để điều chỉnh các biến này. Tôi đã thử rất nhiều kết hợp, nhưng thất bại.

Cách duy nhất thành công là:

Set(CPACK_PACKAGING_INSTALL_PREFIX /usr/local/MyProgramPackageName-V.1.2.3) 

Nhưng biến này được thậm chí không ghi nhận, và hành vi không thể được đảm bảo. Nếu bạn đang nhầm lẫn với câu hỏi của tôi, xin vui lòng tư vấn cho tôi khi sử dụng CPACK_PACKAGE_INSTALL_DIRECTORY? bởi vì mô tả tài liệu về biến này thực sự hấp dẫn, và nó thực sự là những gì tôi muốn, nhưng tôi không thể làm cho nó hoạt động được.

Vui lòng thông báo cho tôi.

Peter

Trả lời

0

Đường dẫn được CPACK sử dụng được lấy từ chỉ thị INSTALL trong tệp CMakeLists.txt của bạn. Điều này cho phép gói kết quả phản chiếu những gì mà 'make install' sẽ thực hiện. Điều này giúp cấu hình CPACK ở mức tối thiểu.

Vì vậy, từ một tập tin ví dụ CMakeLists.txt:

INSTALL(TARGETS ${APPLICATION} DESTINATION bin) 

này sẽ cài đặt vào/usr/bin hay/usr/local/bin. Nếu bạn muốn đặt nó vào một thư mục con hoặc một hoàn toàn khác nhau, bạn có thể làm điều đó ở đây

INSTALL(TARGETS ${APPLICATION} DESTINATION bin/myappdir) 
+0

Tôi đang bối rối. Tôi đang sử dụng CPACK để gói nó, để nó sẽ cài đặt ứng dụng đến nơi tôi muốn. Trong chỉ thị 'INSTALL', tôi luôn cài đặt một thư mục hoặc tập tin vào một đường dẫn tương đối đến INSTALL_PREFIX/DIRECTORY. –

+2

Bạn chỉ muốn một đường dẫn tương đối trong đích cài đặt - nó sẽ tự động cài đặt tương ứng với CMAKE_INSTALL_PREFIX, không cần chỉ định. Chỉ định một đường dẫn tuyệt đối là một cách thuận tiện để có được tất cả các công cụ cài đặt này gây rối. –

9

tôi không tìm thấy bất kỳ tài liệu để hỗ trợ này, nhưng tôi đã tìm thấy một số báo cáo lỗi và tài liệu lưu trữ email mà dường như gợi ý rằng sau đây là những gì bạn nên làm:

set(CPACK_SET_DESTDIR true) 
set(CPACK_INSTALL_PREFIX /opt/MySuperAwesomePrefix-v.1.2.3)

Nếu CPACK_INSTALL_PREFIX không được đặt, nó sẽ mặc định là CMAKE_INSTALL_PREFIX. Bây giờ đường dẫn tương đối từ install(... DESTINATION dest) sẽ kết thúc dưới dạng CPACK_INSTALL_PREFIX/dest bên trong tệp gói của bạn. Điều này làm việc khi tôi cố gắng tạo ra một tập tin deb.

+0

Tôi sẽ thử đề xuất của bạn vào Thứ Hai tới, và cho bạn biết kết quả. Cảm ơn. –

+2

Làm việc cho tôi, cảm ơn. – usr1234567