Bởi vì mỗi bước làm những việc khác nhau
Chuẩn bị (thiết lập) môi trường để xây dựng
./configure
Tập lệnh này có rất nhiều tùy chọn mà bạn nên thay đổi. Thích --prefix
hoặc --with-dir=/foo
. Điều đó có nghĩa là mỗi hệ thống có một cấu hình khác nhau. Đồng thời ./configure
kiểm tra các thư viện bị thiếu cần được cài đặt. Bất cứ điều gì sai ở đây đều không tạo ra ứng dụng của bạn . Đó là lý do tại sao các bản phân phối có các gói được cài đặt ở những nơi khác nhau, bởi vì mọi bản phân phối đều cho rằng tốt hơn nên cài đặt một số thư viện và tệp nhất định vào một số thư mục nhất định. Nói là chạy ./configure
nhưng thực tế bạn nên thay đổi luôn.
Ví dụ, hãy xem trang web gói Arch Linux . Ở đây, bạn sẽ thấy rằng bất kỳ gói nào đều sử dụng tham số cấu hình khác (giả sử chúng đang sử dụng công cụ tự động cho hệ thống xây dựng).
Xây dựng hệ thống
make
Đây thực sự là make all
theo mặc định. Và mỗi thực hiện có các hành động khác nhau để làm. Một số thực hiện xây dựng, một số kiểm tra sau khi xây dựng, một số kiểm tra từ các kho SCM bên ngoài. Thông thường, bạn không phải cung cấp bất kỳ tham số nào, nhưng một số gói thực thi chúng theo cách khác.
Cài đặt vào hệ thống
make install
Điều này cài đặt gói ở nơi được chỉ định với cấu hình. Nếu bạn muốn, bạn có thể chỉ định ./configure
để trỏ đến thư mục chính của bạn. Tuy nhiên, rất nhiều tùy chọn cấu hình đang trỏ đến /usr
hoặc /usr/local
. Điều đó có nghĩa là sau đó bạn phải sử dụng thực sự sudo make install
vì chỉ root mới có thể sao chép tệp vào / usr và / usr / local.
Bây giờ bạn thấy rằng mỗi bước là một yêu cầu trước cho bước tiếp theo. Mỗi bước là một bước chuẩn bị để làm cho mọi thứ hoạt động theo một dòng chảy không có vấn đề. Các phân phối sử dụng phép ẩn dụ này để xây dựng các gói (như RPM, deb, v.v.).
Ở đây bạn sẽ thấy rằng mỗi bước thực sự là một trạng thái khác nhau. Đó là lý do tại sao các trình quản lý gói có các trình bao bọc khác nhau. Dưới đây là ví dụ về trình bao bọc cho phép bạn tạo toàn bộ gói trong một bước. Nhưng hãy nhớ rằng mỗi ứng dụng có một trình bao bọc khác nhau (thực sự những trình bao bọc này có tên như spec, PKGBUILD, v.v.):
def setup:
... #use ./configure if autotools is used
def build:
... #use make if autotools is used
def install:
... #use make all if autotools is used
Ở đây người ta có thể sử dụng công cụ tự động, có nghĩa là ./configure
, make
và make install
. Nhưng một cái khác có thể sử dụng SCons, thiết lập liên quan đến Python hoặc một cái gì đó khác.
Như bạn thấy việc chia nhỏ từng trạng thái giúp mọi thứ dễ dàng hơn nhiều cho việc bảo trì và triển khai, đặc biệt là đối với những người bảo trì gói và phân phối.