Hằng số ghi đè php
Môi trường xây dựng tiêu chuẩn trong bộ sưu tập Gói Nix cung cấp môi trường để xây dựng các gói Unix tự động thực hiện nhiều tác vụ xây dựng phổ biến. Trên thực tế, đối với các gói Unix sử dụng giao diện bản dựng source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild5 tiêu chuẩn, bạn hoàn toàn không cần phải viết tập lệnh bản dựng; . Nếu source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild6 không tự động làm những gì bạn cần, bạn có thể dễ dàng tùy chỉnh hoặc ghi đè các giai đoạn xây dựng khác nhau Show
Để xây dựng một gói với môi trường tiêu chuẩn, bạn sử dụng hàm source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild7, thay vì hàm dựng sẵn nguyên thủy source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild8, e. g stdenv.mkDerivation { name = "libfoo-1.2.3"; src = fetchurl { url = "http://example.org/libfoo-1.2.3.tar.bz2"; sha256 = "0x2g1jqygyr5wiwg4ma1nd7w4ydpy82z9gkcv8vh2v8dn3y58v5m"; }; } ( source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild6 cần nằm trong phạm vi, vì vậy nếu bạn viết phần này trong một biểu thức Nix riêng biệt từ let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)0, bạn cần chuyển nó dưới dạng đối số hàm. ) Chỉ định một let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)1 và một let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)2 là mức tối thiểu tuyệt đối mà Nix yêu cầu. Để thuận tiện, bạn cũng có thể sử dụng các thuộc tính let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)3 và let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)4 và let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)5 sẽ tự động đặt let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)1 thành let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)7 theo mặc định. Kể từ RFC 0035, điều này được ưu tiên cho các gói trong Nixpkgs, vì nó cho phép chúng tôi sử dụng lại phiên bản một cách dễ dàng source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild4 Nhiều gói có phần phụ thuộc không được cung cấp trong môi trường tiêu chuẩn. Chỉ cần chỉ định các phụ thuộc đó trong thuộc tính let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)8 là đủ source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild6 Thuộc tính này đảm bảo rằng các thư mục con let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)9 của các gói này xuất hiện trong biến môi trường source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild80 trong quá trình xây dựng, rằng các thư mục con source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild81 của chúng được trình biên dịch C tìm kiếm, v.v. (Xem Phần 6. 7, “Móc thiết lập gói” để biết chi tiết. ) Thông thường, cần phải ghi đè hoặc sửa đổi một số khía cạnh của bản dựng. Để làm cho điều này dễ dàng hơn, môi trường tiêu chuẩn chia gói xây dựng thành một số giai đoạn, tất cả đều có thể được ghi đè hoặc sửa đổi riêng lẻ. giải nén các nguồn, áp dụng các bản vá, cấu hình, xây dựng và cài đặt. (Có một số khác; xem Phần 6. 5, “Giai đoạn”. ) Chẳng hạn, một gói không cung cấp tệp thực hiện mà thay vào đó phải được biên dịch "thủ công" có thể được xử lý như thế này source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild0 (Lưu ý việc sử dụng chuỗi ký tự kiểu source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild82, rất thuận tiện cho các đoạn script nhiều dòng lớn vì chúng không cần thoát khỏi source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild83 và source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild84 và vì phần thụt lề được loại bỏ một cách thông minh. ) Có nhiều thuộc tính khác để tùy chỉnh bản dựng. Chúng được liệt kê trong Phần 6. 4, “Thuộc tính” Mặc dù môi trường tiêu chuẩn cung cấp trình tạo chung, nhưng bạn vẫn có thể cung cấp tập lệnh xây dựng của riêng mình source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild4 nơi trình xây dựng có thể làm bất cứ điều gì nó muốn, nhưng thường bắt đầu bằng source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild5 để cho source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild6 thiết lập môi trường (e. g. bằng cách đặt lại source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild80 và điền nó từ đầu vào bản dựng). Nếu muốn, bạn vẫn có thể sử dụng trình tạo chung của source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild6 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild Môi trường tiêu chuẩn cung cấp các gói sau
Trên Linux, source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild6 cũng bao gồm tiện ích source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild401 6. 3. Chỉ định phụ thuộcNhư được mô tả trong hướng dẫn sử dụng Nix, hầu hết mọi đường dẫn lưu trữ source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild402 trong bộ thuộc tính của dẫn xuất sẽ tạo ra sự phụ thuộc vào dẫn xuất đó. Tuy nhiên, let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)5 có một vài thuộc tính nhằm bao gồm tất cả các phụ thuộc của một gói. Điều này được thực hiện cho cả cấu trúc và tính nhất quán, nhưng cũng để một số thiết lập khác có thể diễn ra. Ví dụ: một số phụ thuộc nhất định cần thêm thư mục bin của chúng vào source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild80. Điều đó được tích hợp sẵn, nhưng thiết lập khác được thực hiện thông qua cơ chế có thể cắm được hoạt động cùng với các thuộc tính phụ thuộc này. Xem Phần 6. 7, “Móc thiết lập gói” để biết chi tiết Sự phụ thuộc có thể được chia nhỏ dọc theo ba trục. nền tảng máy chủ và đích của chúng so với nền tảng phái sinh mới và liệu chúng có được truyền bá hay không. Sự khác biệt của nền tảng được thúc đẩy bởi quá trình biên dịch chéo; . Nhưng ngay cả khi một nền tảng không biên dịch chéo, các nền tảng ngụ ý liệu có cần phụ thuộc vào thời gian chạy hay thời gian xây dựng hay không, một khái niệm có ý nghĩa hoàn hảo bên ngoài biên dịch chéo. Theo mặc định, sự khác biệt về thời gian chạy/thời gian xây dựng chỉ là một gợi ý cho tinh thần rõ ràng, nhưng với bộ source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild405, nó hầu như được thực thi ngay cả trong trường hợp gốc Phần mở rộng của source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild80 với các phụ thuộc, được đề cập ở trên, chỉ tiến hành theo các nền tảng tương đối. Quá trình này chỉ được thực hiện đối với các phụ thuộc có nền tảng máy chủ phù hợp với nền tảng xây dựng dẫn xuất mới i. e. phụ thuộc chạy trên nền tảng nơi dẫn xuất mới sẽ được xây dựng. Đối với mỗi phụ thuộc của các phụ thuộc đó, source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild407, nếu có, được thêm vào biến môi trường source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild80 Một phụ thuộc được cho là được lan truyền khi một số phụ thuộc hạ lưu chuyển tiếp khác (không ngay lập tức) của nó cũng cần nó như một phụ thuộc ngay lập tức Điều quan trọng cần lưu ý là các phụ thuộc không nhất thiết phải được truyền bá giống như loại phụ thuộc như trước đây, mà là loại tương ứng để các quy tắc nền tảng vẫn xếp hàng. Để xác định các quy tắc chính xác cho việc truyền bá phụ thuộc, chúng tôi bắt đầu bằng cách gán cho mỗi phụ thuộc một vài số thứ ba ( source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild409 cho source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild410, source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild411 cho source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild412 và source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild413 cho source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild414) đại diện cho loại phụ thuộc của nó, cho biết mỗi nền tảng máy chủ và nền tảng đích của nó giống nhau như thế nào. . Bảng dưới đây tóm tắt các kết hợp khác nhau có thể thu được source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild415tên thuộc tínhoffset source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild416 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild417 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild418 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild419 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild420 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild421 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild422 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild423 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild424 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild425 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild426 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild427 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild428 let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C)8 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild430 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild431 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild432 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild433 Về mặt thuật toán, chúng tôi duyệt qua các đầu vào được truyền bá, tích lũy các phụ thuộc được truyền bá của mọi phụ thuộc được truyền bá và điều chỉnh chúng để giải thích cho “sự thay đổi trong quan điểm” được mô tả bởi độ lệch nền tảng của phụ thuộc hiện tại. Kết quả này là một kiểu đóng cửa chuyển tiếp của mối quan hệ phụ thuộc, với độ lệch xấp xỉ bằng tổng khi hai liên kết phụ thuộc được kết hợp. Chúng tôi cũng loại bỏ các phụ thuộc chuyển tiếp có độ lệch kết hợp vượt quá giới hạn, có thể được xem như một bộ lọc đối với việc đóng chuyển tiếp đó, loại bỏ các phụ thuộc rõ ràng là vô lý Chúng ta có thể xác định chính xác quy trình bằng Suy diễn tự nhiên bằng cách sử dụng các quy tắc suy luận. Điều này có vẻ hơi khó hiểu, nhưng mã bash thực sự thực hiện nó cũng vậy. Chúng gây nhầm lẫn theo những cách rất khác nhau nên… hy vọng nếu có điều gì đó không hợp lý trong bản trình bày này thì nó sẽ có ý nghĩa trong bản trình bày khác let mapOffset(h, t, i) = i + (if i <= 0 then h else t - 1) propagated-dep(h0, t0, A, B) propagated-dep(h1, t1, B, C) h0 + h1 in {-1, 0, 1} h0 + t1 in {-1, 0, 1} -------------------------------------- Transitive property propagated-dep(mapOffset(h0, t0, h1), mapOffset(h0, t0, t1), A, C) source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild8 source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild2 Một số lời giải thích về sự quái dị này là theo thứ tự. Trong trường hợp phổ biến, phần bù mục tiêu của phần phụ thuộc là phần kế thừa của phần bù mục tiêu. source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild434. Đó nghĩa là source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild40 Đây là nơi "sum-like" đến từ phía trên. Chúng tôi chỉ có thể tính tổng tất cả các phần bù máy chủ để lấy phần bù máy chủ của phần phụ thuộc bắc cầu. Phần bù mục tiêu là phần phụ thuộc bắc cầu chỉ đơn giản là phần bù máy chủ + 1, giống như với các phần phụ thuộc được cấu tạo để tạo thành phần phụ thuộc bắc cầu này; Do kiểm tra giới hạn, các trường hợp không phổ biến là source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild435 và source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild436. Trong trường hợp trước, động cơ của source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild437 là vì nền tảng máy chủ và nền tảng đích của nó giống nhau, nên không có sự phụ thuộc bắc cầu nào của nó có thể “khám phá” một phần bù lớn hơn phần bù mục tiêu đã giảm của nó. source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild437 “bóp chết” một cách hiệu quả tất cả các phần bù phụ thuộc chuyển tiếp của nó để không phần nào lớn hơn phần bù mục tiêu của gói source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild435 ban đầu. Trong trường hợp khác, source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild440 bị bỏ qua giữa phần bù của máy chủ và mục tiêu. Thay vì xóa các phần bù, chúng ta cần "tách" chúng ra để không có phần bù phụ thuộc chuyển tiếp nào là phần bù đó Nhìn chung, chủ đề thống nhất ở đây là việc truyền bá không nên giới thiệu các phụ thuộc bắc cầu liên quan đến các nền tảng mà gói phụ thuộc không biết. [Người ta có thể tưởng tượng gói phụ thuộc yêu cầu các phụ thuộc với các nền tảng mà nó biết; . Mô tả nền tảng trong kịch bản đó là một loại khả năng không thể thay thế được. ] Việc kiểm tra giới hạn bù trừ và định nghĩa của source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild437 cùng nhau đảm bảo rằng đây là trường hợp. Khám phá một phần bù mới là khám phá một nền tảng mới và vì những nền tảng đó không có trong “thông số kỹ thuật” phái sinh của gói cần thiết nên chúng không thể phù hợp. Từ góc độ khả năng, chúng ta có thể tưởng tượng rằng máy chủ và nền tảng đích của gói là các khả năng mà gói yêu cầu và gói phụ thuộc phải cung cấp khả năng cho phần phụ thuộc. 6. 3. 1. Các biến chỉ định phụ thuộcDanh sách các phụ thuộc có nền tảng máy chủ và đích là nền tảng xây dựng của phái sinh mới. Đây là những chương trình và thư viện được sử dụng tại thời điểm xây dựng để tạo ra các chương trình và thư viện cũng được sử dụng tại thời điểm xây dựng. Nếu phần phụ thuộc không quan tâm đến nền tảng đích (tôi. e. không phải là trình biên dịch hoặc công cụ tương tự), thay vào đó hãy đặt nó vào source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild420. Việc sử dụng phổ biến nhất của source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild443 này, trình biên dịch C mặc định cho vai trò này. Ví dụ đó xuất hiện nhiều hơn những gì người ta có thể nghĩ trong các thư viện C cũ thường được sử dụng Vì các gói này có thể chạy trong thời gian xây dựng nên chúng luôn được thêm vào source $stdenv/setup buildPhase() { echo ".. this is my custom build phase ..." gcc foo.c -o foo } installPhase() { mkdir -p $out/bin cp foo $out/bin } genericBuild80, như đã mô tả ở trên. Nhưng vì các gói này chỉ được đảm bảo để có thể chạy sau đó, chúng không nên tồn tại dưới dạng phụ thuộc thời gian chạy. Điều này hiện không được thực thi, nhưng có thể trong tương lai 6. 3. 1. 2. |