2017-01-04 26 views
9

Tôi đang cố gắng tìm một số giải pháp miễn phí sudo để cho phép người dùng của tôi cài đặt và hủy cài đặt ứng dụng của tôi. Sử dụngHỗ trợ CMake "gỡ cài đặt"?

set(CMAKE_INSTALL_PREFIX "$ENV{HOME}/opt/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}/") 
SET(CMAKE_INSTALL_RPATH "$ENV{HOME}/${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}/") 

tôi có thể trực tiếp các tập tin vào thư mục chính của người dùng, và

make install 

hoạt động tốt. Với tham chiếu đến What's the opposite of 'make install', ie. how do you uninstall a library in Linux? Tôi không tìm thấy bất kỳ ý tưởng nào, là sudo-miễn phí và không phức tạp đối với người không phải là quản trị viên hệ thống.

  1. Bằng cách nào đó make uninstall được CMake hỗ trợ?

  2. Gỡ cài đặt của tôi khá đơn giản: tất cả các tệp đều nằm trong thư mục con của trang chủ của người dùng. Về nguyên tắc, loại bỏ rằng thư mục con mới có thể giải quyết vấn đề. Có make install, với các tham số ở trên, bất kỳ tác dụng phụ nào hoặc tôi có thể viết trong hướng dẫn của người dùng rằng thư mục con mới được tạo có thể bị xóa là 'gỡ cài đặt'?

+0

Tiềm năng trùng lặp: http://stackoverflow.com/questions/19921017/cleaning-cmake-installed-files – usr1234567

+1

Bản sao có thể có của [Làm sạch các tệp đã cài đặt CMake] (https: // stackoverflow.com/questions/19921017/cleaning-cmake-installed-files) –

Trả lời

6

Không có. Xem trong FAQ from CMake wiki:

Theo mặc định, CMake không cung cấp mục tiêu "gỡ cài đặt", vì vậy, bạn không thể thực hiện việc này. Chúng tôi không muốn "gỡ cài đặt" để xóa các tệp hữu ích khỏi hệ thống.

Nếu bạn muốn có mục tiêu "gỡ cài đặt" trong dự án của mình, thì không ai ngăn bạn cung cấp. Bạn cần xóa các tệp được liệt kê trong tệp install_manifest.txt. [Tiếp theo một số mã ví dụ]

+0

Tôi vui mừng khi thấy rằng có những người tin rằng nếu người ta cài đặt một tập tin trong quá trình phát triển, nó sẽ ở đó mãi mãi. Cảm ơn gợi ý, tôi sẽ sử dụng mã ví dụ. BTW: Tôi nghĩ bạn cũng đã trả lời câu hỏi số 2 của tôi: chỉ cần xóa thư mục chứa các tệp sẽ không có tác dụng phụ. – katang

13

Nếu bạn muốn thêm một uninstall nhắm mục tiêu, bạn có thể có một cái nhìn vào chính thức CMake FAQ tại địa chỉ:

https://cmake.org/Wiki/CMake_FAQ#Can_I_do_.22make_uninstall.22_with_CMake.3F

Nếu bạn chỉ muốn một cách nhanh chóng để gỡ cài đặt tất cả các tệp, chỉ cần chạy:

xargs rm < install_manifest.txt 

install_manifest.txt tệp được tạo khi bạn chạy make install.

+1

Nhưng điều này chỉ xóa các tệp không phải thư mục. Đó là ok nếu bạn chỉ có tiêu đề và thư viện nhưng nếu bạn cài đặt một gói python, bạn phải tạo các thư mục như '/home/user/.local/miniconda3/envs/galario3/lib/python3.6/site-packages/galario/ '. 'xargs ...' đơn giản không xóa chúng, do đó bạn phải thêm logic theo cách thủ công, ví dụ trong mục tiêu 'uninstall' –

1

Gỡ bỏ các file và thư mục (trống chỉ) thêm bởi make install từ một dự án cmake:

cat install_manifest.txt | sudo xargs rm 
cat install_manifest.txt | xargs -L1 dirname | sudo xargs rmdir -p 

Lệnh thứ hai sẽ in một loạt các sai lầm vì nó đệ quy xóa các thư mục cho đến khi nó tìm thấy một mà không phải là sản phẩm nào. Tôi thích nhìn thấy những lỗi đó để biết thư mục nào còn lại. Nếu bạn muốn ẩn các lỗi này, bạn có thể thêm --ignore-fail-on-non-empty vào rmdir.

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