Tiếng AnhTiếng PhápTiếng Tây Ban Nha

Ad


Biểu tượng yêu thích OnWorks

metaconfig - Trực tuyến trên đám mây

Chạy metaconfig trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks trên Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

Đây là metaconfig lệnh có thể được chạy trong nhà cung cấp dịch vụ lưu trữ miễn phí OnWorks bằng cách sử dụng một trong nhiều máy trạm trực tuyến miễn phí của chúng tôi như Ubuntu Online, Fedora Online, trình giả lập trực tuyến Windows hoặc trình mô phỏng trực tuyến MAC OS

CHƯƠNG TRÌNH:

TÊN


metaconfig - một trình tạo tập lệnh Định cấu hình

SYNOPSIS


siêu cấu hình [-dhkmostvwGMV ] [-L dir ]

MÔ TẢ


siêu cấu hình là một chương trình tạo cấu hình các tập lệnh. Nếu bạn không biết những gì
Định cấu hình tập lệnh là, vui lòng bỏ qua Tutorial phần của trang hướng dẫn này. Nếu bạn muốn
mô tả đầy đủ (chính thức) về cách sử dụng siêu cấu hình và các đơn vị của nó, vui lòng xem
THAM KHẢO phần. Sau đây là phần giới thiệu nhanh và tham khảo cho những người am hiểu
người sử dụng.

siêu cấu hình hoạt động từ tập hợp của các đơn vị xác định mọi thứ mà metaconfig biết về
tính di động. Mỗi đơn vị là khép kín và không phải đăng ký ở bất kỳ đâu
ngoài việc đưa vào thư mục U công cộng hoặc thư mục U riêng tư của bạn. Nếu như
gói dist (trong đó metaconfig là một phần) được cài đặt trong LIB, sau đó công khai U
thư mục là LIB / dist / mcon / U. Trên máy này, thư mục LIB là / usr / share / dist. Của bạn
thư mục riêng U, nếu bạn có, nằm trong thư mục cấp cao nhất trong gói của bạn.
Trước khi bạn có thể chạy siêu cấu hình bạn phải làm một số điều:

· Tạo tệp .package trong thư mục cấp cao nhất của gói bằng cách chạy đóng gói.
Chương trình này sẽ hỏi bạn về gói hàng của bạn và ghi nhớ những gì bạn nói với nó để
tất cả các chương trình phân phối có thể thông minh.

· Tham khảo Bảng chú giải thuật ngữ (trong LIB / dist / mcon) và viết các tập lệnh shell và chương trình C của bạn
về các ký hiệu mà metaconfig biết cách xác định. Bạn không cần phải nói
metaconfig bạn đã sử dụng những ký hiệu nào, vì metaconfig sẽ tìm ra điều đó cho bạn.

· Tạo bất kỳ tập lệnh .SH nào cần thiết để viết Makefiles hoặc các tập lệnh shell sẽ phụ thuộc
trên các giá trị được Định cấu hình. Có một chương trình được gọi là làmSH điều đó sẽ giúp bạn
chuyển đổi một tập lệnh thuần túy thành một mẫu script.SH; một số chỉnh sửa vẫn sẽ cần
được thực hiện trên tệp .SH kết quả để di chuyển phần cấu hình biến trong
phần trên cùng của tập lệnh (xem các nhận xét nội dòng được tạo bởi làmSH trong .SH của bạn
nộp).

· Tạo tệp MANIFEST.new trong thư mục cấp cao nhất của bạn liệt kê tất cả các tệp trong
Gói của bạn. Tệp này sẽ vẫn ở chế độ riêng tư và sẽ không phải là một phần của tệp cuối cùng
phân bổ. (Để thuận tiện, tệp MANIFEST sẽ được sử dụng bởi siêu cấu hình if
chưa có tệp MANIFEST.new.) Tên tệp phải là trường đầu tiên trên mỗi
hàng. Sau một số khoảng trắng, bạn có thể thêm một nhận xét ngắn mô tả tệp của bạn. Chỉ một
các tập tin nguồn nên được liệt kê trong đó. Tệp đặc biệt patchlevel.h (đó là
được xử lý và duy trì bởi các công cụ vá - xem pat(1)) nên là một phần của
Tệp MANIFEST.new, nhưng có thể bị một số công cụ âm thầm bỏ qua. Như một quy luật của,
chỉ các tệp được duy trì bởi RCS mới được liệt kê trong đó, patchlevel.h tập tin được
một ngoại lệ quan trọng.

· Theo tùy chọn, bạn có thể muốn tạo tệp MANIFEST, tệp này sẽ là phiên bản được xuất
trong số MANIFEST.new của bạn. Tệp đó phải là một phần của bản phát hành, tức là được liệt kê trong cả hai
MANIFEST.mới và chính MANIFEST của bạn. Một trong những siêu cấu hình các đơn vị biết về điều này
và sẽ buộc Định cấu hình thực hiện kiểm tra bản phát hành, đảm bảo tất cả các tệp
liệt kê có một phần của phân phối. Các tệp MANIFEST và MANIFEST.new nên
là riêng biệt, không liên kết.

· Sao chép bất kỳ tệp .U nào mà bạn muốn sửa đổi vào thư mục U riêng tư của mình. Mọi tệp .U
trong thư mục U riêng tư của bạn sẽ được sử dụng ưu tiên cho thư mục trong U công cộng
danh mục. Ví dụ: một cách để buộc bao gồm bất kỳ đơn vị nào là sao chép End.U
tệp vào thư mục .U của bạn và thêm tên của đơn vị bạn muốn làm phụ thuộc vào
cuối dòng? MAKE:. Một số đơn vị CHỈ có thể bị ép buộc theo cách này, cụ thể là
những người có dạng Cảnh báo _ *. u và Chk _ *. u. Bạn cũng có thể tùy chỉnh một số mặc định nhất định
Định cấu hình các biến bằng cách sao chép Myinit.U vào thư mục U riêng tư trong gói của bạn và
thiết lập các biến trong đơn vị đó.

Bây giờ bạn đã sẵn sàng để chạy siêu cấu hình. Điều đó sẽ tạo ra một Thiết lập tệp, và tùy chọn
config_h.SH tệp (nếu nguồn của bạn sử dụng bất kỳ ký hiệu C nào). Các tệp được tạo sẽ
tự động được thêm vào MANIFEST.new của bạn nếu cần thiết. Đừng quên cập nhật của bạn
Tệp MANIFEST.

Để tạo các đơn vị mới, hãy làm như sau:

· Sao chép một đơn vị tương tự vào một tệp .U mới. Tên bạn chọn phải là tên của
biến do đơn vị tạo ra, mặc dù điều này chỉ mang lại sự thuận tiện cho bạn, không phải là một
yêu cầu. Nó phải có 12 ký tự trở xuống để ngăn chặn việc cắt tên tệp.
Trên thực tế, nó có lẽ phải là 10 hoặc ít hơn để những người muốn sử dụng RCS có thể có
a .U, v ở cuối mà không bị chặt chém. Metaconfig sử dụng trường hợp của chữ cái đầu tiên để
xác định xem có biến nào thực sự do đơn vị này tạo ra hay không, vì vậy đừng viết hoa
tên đơn vị nếu nó được cho là tạo ra một biến shell.

· Chỉnh sửa tệp .U mới để làm những gì bạn muốn. Đầu tiên? MAKE: dòng cho biết
sự phụ thuộc; trước dấu hai chấm của danh sách cuối cùng, tất cả các biến mà đơn vị này xác định, và
sau dấu hai chấm cuối cùng, tất cả các biến (hoặc các đơn vị khác) mà đơn vị này phụ thuộc vào.
Điều rất quan trọng là các danh sách này phải chính xác. Nếu một phụ thuộc là tùy chọn và
giá trị mặc định có thể được sử dụng, bạn nên đặt tiền tố phụ thuộc bằng dấu '+'. Các
đơn vị tương ứng sẽ không được tải để tính toán ký hiệu, trừ khi thực sự cần thiết
của một đơn vị khác.

· Trong phạm vi có thể, hãy tham số hóa đơn vị của bạn dựa trên biến shell được xác định trên
? INIT: dòng. Thao tác này sẽ chuyển các định nghĩa biến lên đơn vị Init.U, trong đó
chúng có thể bị ghi đè bởi các định nghĩa trong Myinit.U, được bao gồm sau Init.U.

· Thêm định nghĩa của bất kỳ ký hiệu C nào mong muốn như? H: dòng. Một dòng bắt đầu bằng
? H:?% <: Trong tệp .U sẽ được thêm vào tệp config.h cuối cùng nếu và chỉ khi
metaconfig quyết định rằng đơn vị này là cần thiết. % <Là viết tắt của tên đơn vị,
đây cũng là tên của tệp (không có .U) nếu bạn làm theo
quy ước. Luôn đặt nhận xét trên mỗi dòng? H: trong trường hợp một trong các biến
sự thay thế trước đó trên dòng bắt đầu một nhận xét mà không kết thúc nó. Bất kỳ vỏ nào
biến bắt đầu bằng d_ có thể làm điều này, vì vậy hãy cẩn thận. Nếu bạn bỏ dấu?% <:, thì
metaconfig sẽ cố gắng nhập biểu tượng có định nghĩa cần thiết trước bất kỳ
đưa vào config.h.

· Thêm các định nghĩa thuật ngữ dưới dạng? S: dòng cho các biến shell và? C: dòng cho C
các biến tiền xử lý. Xem một đơn vị hiện tại để biết ví dụ. Nó RẤT quan trọng đối với
bắt đầu mỗi mục nhập bằng tên ký hiệu căn trái và kết thúc mỗi mục nhập bằng dấu? C:. hoặc
?NS:. hàng. Thuật toán dịch các mục ký hiệu tiền xử lý C cho
Bảng chú giải thuật ngữ cho config.h phụ thuộc vào điều này.

· Hãy chắc chắn rằng thứ tự của tất cả của bạn? dòng là đúng. Thứ tự đúng là:

? RCS: và? X: về cơ bản chỉ là nhận xét
? MAKE: phụ thuộc metaconfig
? Y: chỉ thị bố trí đơn vị
? S: định nghĩa bảng chú giải thuật ngữ
? C: thuật ngữ C định nghĩa
Định nghĩa? H: config.h
Định nghĩa? M: confmagic.h
? W: biểu tượng truy nã
? V: các ký hiệu hiển thị
? F: tệp được tạo bởi đơn vị này
? T: ký hiệu vỏ tạm thời được sử dụng
? D: giá trị mặc định của phụ thuộc tùy chọn
? O: dùng để đánh dấu các đơn vị lỗi thời
? LINT: gợi ý metalint
? INIT: khởi tạo ký hiệu shell

Dưới đây là một ví dụ để hiển thị thứ tự của các dòng và các định dạng khác nhau được phép:

? RCS: $ RCS-Id $
? RCS: Thông tin bản quyền
? RCS: $ RCS-Nhật ký $
?NS:
? X: Một ví dụ giả định
?NS:
? MAKE: d_one two: three + four Five
? MAKE: -chọn thêm $ @%
? Y: DEFAULT
? S: d_one:
S: Ký hiệu shell đầu tiên, xác định một cách có điều kiện.
?NS:.
? S: hai:
S: Biểu tượng vỏ thứ hai, giá trị cho HAI.
?NS:.
? C: MỘT:
? C: Ký hiệu C đầu tiên.
?NS:.
? C: HAI:
? C: Ký hiệu C thứ hai.
?NS:.
? H: # $ d_one ONE / ** /
? H: #define TWO "$ hai"
? H: # $ d_one ONE_TWO "$ hai"
?NS:.
? M: lật: HAS_FLIP
? M: #ifndef HAS_FLIP
? M: #define lật (x) thất bại (x)
? M: #endif
?NS:.
? W:% <: one_two
? V: p_one p_two: p_three
? F: tệp ./ftest! Tmp
? T: tmp var
? D: two = 'undef'
? LINT: thay đổi ba
? INIT: hai_init = '2'
: mã shell thực hiện đơn vị sau
p_one = 'một'
p_two = 'hai'
p_three = ""

Hãy để tôi nói rõ nó một lần nữa: định nghĩa đơn vị ở trên là một giả mạo một để chỉ hiển thị
các khả năng khác nhau. Một đơn vị như vậy dù sao cũng sẽ phục vụ mục đích nhỏ ... Một số khác
các tính năng nâng cao không được mô tả ở đây. Vui lòng tham khảo THAM KHẢO phần để biết thêm
thông tin đầy đủ.

· Đặt đơn vị vào thư mục U công cộng hoặc riêng tư nếu thích hợp.

· Chạy lại siêu cấu hình.

· Gửi đơn vị của bạn đến [email được bảo vệ] (Raphael Manfredi) để đưa vào bản sao chính,
nếu bạn nghĩ rằng nó có lợi ích chung.

Để thêm một chương trình mới vào vị trí:

· Chỉnh sửa Loc.U, và thêm cả tên của chương trình vào dòng? MAKE: (giữa
hai dấu hai chấm) và tới danh sách định vị hoặc danh sách thử (tùy thuộc vào chương trình có
bắt buộc hay không).

· Chạy lại metaconfig.

· Gửi đơn vị của bạn cho tôi để đưa vào bản sao chính, nếu bạn nghĩ nó chung chung
quan tâm.

Các lưu ý khi viết tệp .U:

* Luôn sử dụng "rm -f" vì có những hệ thống trong đó rm tương tác theo mặc định.

* Không sử dụng "set - ..." vì '-' không hoạt động với mọi trình bao. Sử dụng "set x ...;
sự thay đổi".

* Không sử dụng "ENV chưa đặt" vì chưa đặt không hoàn toàn có thể di chuyển được. Thay vào đó, hãy nói "ENV = ''".

* Luôn sử dụng echo "" (có dấu cách) vì hệ thống Eunice.

* Chỉ sử dụng thử nghiệm với -r, -w, -f hoặc -d vì đó là những công tắc di động duy nhất. Trong
đặc biệt, tránh "test -x".

* Chỉ sử dụng các chương trình đi kèm với V7 để bạn biết rằng mọi người đều có chúng.

* Sử dụng $ chứa khi bạn muốn chuyển đổi theo điều kiện, vì không phải tất cả các lệnh grep đều trả về
tình trạng hợp lý. Đảm bảo chuyển hướng đầu ra đến / dev / null, bằng cách sử dụng '> / dev / null
2> & 1 '.

* Sử dụng "if test" thay vì "if [...]" vì không phải sh nào cũng biết cấu trúc sau.

* Sử dụng tập lệnh myread cho các đầu vào để chúng có thể thực hiện thoát trình bao và mặc định
đánh giá. Hình thức chung là

trường hợp "$ grimble" trong
'') dflt = 452 ;;
*) dflt = "$ grimble" ;;
nó C
rp = 'Bạn có bao nhiêu câu chuyện?'
. ./myread
grimble = "$ ans"

* Sử dụng tập lệnh getfile khi yêu cầu tên đường dẫn tệp để có tùy chọn
~ tên mở rộng và kiểm tra sự tỉnh táo. Xem đơn vị Getfile.U để biết giải mã đầy đủ.

* Luôn đặt một

$ startsh

ở đầu mỗi tập lệnh đã tạo sẽ được khởi chạy hoặc có nguồn gốc bởi
Thiết lập.

* Không bao giờ cho rằng UNIX-isms phổ biến như thực tế là tệp đối tượng kết thúc bằng .o
tên thư viện kết thúc bằng .a. Sử dụng $ _o$ _a thay vào đó (xem
Unix.U).

* Khi thực hiện kiểm tra biên dịch-liên kết-thực thi, hãy luôn viết nó như sau:

$ cc $ ccflags $ ldflags try.c -o hãy thử $ libs

bởi vì một số hệ thống yêu cầu rằng các cờ liên kết phải được chỉ định trước khi biên dịch
target (ngoại trừ các thư viện liên kết theo sau).

* Đưa ra các thông báo quan trọng trên bộ mô tả tệp # 4, bằng cách sử dụng '> & 4' để chuyển hướng đầu ra.
Chỉ những thông báo đó sẽ xuất hiện khi -s chuyển đổi được trao cho Thiết lập trên
dòng lệnh (chế độ im lặng).

* Luôn cố gắng xác định xem một đối tượng địa lý có hiện diện theo cách cụ thể nhất hay không - không
nói "if bsd" khi bạn có thể grep libc. Có rất nhiều hệ thống kết hợp ngoài kia, và
mỗi tính năng sẽ tự đứng hoặc giảm.

* Luôn cố gắng xác định xem một đối tượng địa lý có hiện diện theo cách chung nhất hay không, để
các gói khác có thể sử dụng đơn vị của bạn.

* Khi nghi ngờ, hãy đặt mặc định và hỏi. Đừng giả định bất cứ điều gì.

* Nếu bạn cho rằng người dùng sai, hãy cho phép thực tế rằng họ có thể đúng. Vì
chẳng hạn, anh ta có thể đang chạy Cấu hình trên một hệ thống khác với hệ thống mà anh ta sẽ sử dụng
sản phẩm cuối cùng trên.

Metaconfig bảo lưu các tên sau trong danh bạ của bạn và nếu bạn sử dụng tên đó thì
có thể bị che phủ hoặc có các tác động không lường trước khác:

.MT / *
Thiết lập
Muốn
Lỗi thời
cấu hình
config_h.SH
confmagic.h
U / *
MANIFEST.new

Ngoài ra, Cấu hình có thể chặn những tên này trong thư mục mà nó được chạy trong:

Ư / *
config.sh
cấu hình.h

LỰA CHỌN


Các tùy chọn sau được công nhận bởi siêu cấu hình:

-d Bật chế độ gỡ lỗi. Không thực sự hữu ích trừ khi bạn đang gỡ lỗi siêu cấu hình
chính nó.

-h In thông báo trợ giúp và thoát.

-k Giữ thư mục tạm thời để bạn có thể kiểm tra các tệp đang hoạt động được sử dụng bởi
siêu cấu hình để xây dựng Thiết lập kịch bản. Chỉ hữu ích khi gỡ lỗi
các đơn vị.

-m Giả sử nhiều bộ nhớ và không gian hoán đổi. Điều này sẽ tăng tốc độ tra cứu ký hiệu trong
các tệp nguồn trong một khoảng thời gian đáng kể, với chi phí của bộ nhớ
sự tiêu thụ...

-o Ánh xạ các biểu tượng lỗi thời trên những biểu tượng mới. Sử dụng công tắc này nếu bạn vẫn còn một số
các ký hiệu lỗi thời trong mã nguồn của bạn và không muốn (hoặc không thể) xóa
chúng cho bây giờ. Các ký hiệu lỗi thời sẽ bị bỏ qua, mặc dù điều đó
sẽ cung cấp cho bạn một cảnh báo từ siêu cấu hình.

-s Bật chế độ im lặng.

-t Theo dõi các biểu tượng khi chúng được tìm thấy.

-v Bật chế độ tiết.

-w Giả sử tệp truy nã đã được cập nhật. Điều này sẽ bỏ qua thời gian và bộ nhớ
tiêu tốn giai đoạn quét mã nguồn, tìm kiếm các ký hiệu đã biết. Sử dụng nó
chỉ khi bạn biết rằng tệp nguồn của bạn không thay đổi đối với
hồ bơi siêu cấu hình các ký hiệu được sử dụng.

-G Đồng thời cung cấp GNU cấu hình-như giao diện người dùng được tạo Thiết lập
script, cũng được đưa vào bản phân phối. Đây chỉ là một trình bao bọc
xung quanh Thiết lập kịch bản một cách tự nhiên, nhưng nó cho phép mọi người quen thuộc với
Công cụ GNU để không bị mất khi đối mặt với một bản phân phối mới.

-L dir Ghi đè vị trí thư viện mặc định. Thông thường chỉ hữu ích cho metaconfig
người bảo trì sử dụng cục bộ các thiết bị đang được phát triển thay vì
những cái có sẵn công khai. Các dir được chỉ định là một chứa các đơn vị
U thư mục.

-M Cho phép sản xuất một confmagic.h tệp để tự động remap một số tốt-
các biểu tượng đã biết đến một số thay thế khác, như bản sao() đang được ánh xạ lại
minh bạch với memcpy () khi không có sẵn. Tùy chọn này được bật
tự động khi một confmagic.h tệp tồn tại trong thư mục cấp cao nhất.
Chỉ cần xóa tệp đó nếu bạn muốn tắt tùy chọn này vĩnh viễn.

-V In số phiên bản và thoát.

Tutorial


Phần (dài) này là phần giới thiệu về siêu cấu hình, trong đó chúng ta sẽ tìm hiểu tất cả
những điều cơ bản. Nếu bạn đã biết cách sử dụng siêu cấu hình, bạn có thể bỏ qua phần tiếp theo một cách an toàn
phần.

Giới thiệu chung
Thông thường, khi bạn muốn lấy một số gói nguồn để biên dịch trên một nền tảng nhất định, bạn có
để chỉnh sửa Makefile chính (giả sử có một!), hãy chọn một trình biên dịch C, đảm bảo rằng bạn
có các thư viện thích hợp, và sau đó kích hoạt làm cho chỉ huy. Nếu gói hợp lý
được viết tốt, nó sẽ biên dịch (không có cảnh báo là một tùy chọn :-). Trong chính nó, cuối cùng
câu là một hiệu suất thực sự, vì dựa trên nhiều nền tảng UNIX có sẵn ngày nay
và sự đa dạng của hương vị, điều đó có nghĩa là tác giả của gói đã đi sâu vào
rắc rối để tìm ra các lựa chọn đúng với một số thử nghiệm tiêu chuẩn, phỏng đoán và lộn xộn
xung quanh với hệ thống bao gồm và các loại.

Tuy nhiên, bất chấp tất cả tài năng của mình, tác giả không thể biết rằng một số hệ thống có
lệnh gọi hệ thống bị hỏng hoặc cấu trúc hệ thống nào đó thiếu một trường tiêu chuẩn khác, hoặc
đơn giản là liệu một tệp bao gồm đã cho có tồn tại hay không. Và tôi không xem xét điều ngầm hiểu
các giả định, như kiểu được trả về bởi malloc () chức năng hoặc sự hiện diện của
đổi tên() hệ thống gọi tên một vài. Nhưng kiến ​​thức đó là cần thiết để đạt được thực
tính di động.

Bây giờ chúng ta đừng lạm dụng chính mình. Sử dụng thông tin đó đòi hỏi các kỹ năng cao hơn, nhưng nó có thể
dẫn đến nhiều chương trình di động hơn vì sau đó nó được viết theo kiểu độc lập với hệ thống
và chỉ dựa trên thực tế là một số giả định là đúng hay sai trên một hệ thống cụ thể,
mỗi giả định không liên quan với nhau. Có nghĩa là, chúng tôi không nói: Chúng tôi đang trên
Hệ thống BSD hoặc chúng tôi đang sử dụng hệ thống USG. Dù sao thì ngày nay điều đó quá mờ nhạt. Không, chúng tôi muốn
nói với mã nguồn: hệ thống này không có đổi tên() cuộc gọi hệ thống và malloc ()
trả về một (vô hiệu *) giá trị.

Metaconfig là một công cụ cho phép bạn làm điều đó, với lợi ích bổ sung là không
phải chỉnh sửa thủ công Makefile nếu mọi việc suôn sẻ. Bằng cách chạy siêu cấu hình, bạn tạo ra một
tập lệnh shell có tên Thiết lập. Rất nhiều nỗ lực đã được dành cho tập lệnh Định cấu hình
nội bộ để đảm bảo nó sẽ chạy trên 99% các shell hiện tại có sẵn kể từ lúc này
viết. Cấu hình sẽ thăm dò hệ thống mục tiêu, đặt câu hỏi khi nghi ngờ và
tập hợp tất cả các câu trả lời trong một tệp shell duy nhất, tệp này có thể được sử dụng để
tự động tạo các tệp Makefiles được cấu hình và tệp bao gồm C.

Chỉ có một bộ ký hiệu hạn chế (nhưng khá lớn) có sẵn cho các tập lệnh shell của bạn
và chương trình C. Tất cả chúng đều được ghi lại trong tệp Bảng chú giải thuật ngữ. Tất cả những gì bạn cần làm là học
về chúng và bắt đầu sử dụng chúng để giải quyết các vấn đề về tính di động và cấu hình. Sau đó,
bằng cách chạy siêu cấu hình, một tập lệnh Định cấu hình phù hợp sẽ được tạo cho gói của bạn.

Tập lệnh Định cấu hình được tạo ra một số đơn vị (hơn 300), mỗi đơn vị là
chịu trách nhiệm xác định một số lượng nhỏ các ký hiệu shell và / hoặc C. Các đơn vị được lắp ráp
cùng nhau ở giai đoạn cuối cùng, tôn vinh biểu đồ phụ thuộc (một đơn vị có thể cần kết quả
của một số đơn vị khác sau đó được đặt trước trong tập lệnh).

Biểu tượng
Biểu tượng là điều quan trọng nhất trong siêu cấu hình thế giới. Chúng nhỏ nhất
thực thể được công nhận, thường là một từ và có thể được cấp một giá trị ở cuối Cấu hình
chấp hành. Ví dụ: ký hiệu C pre-processor HAS_RENAME là một siêu cấu hình biểu tượng rằng
được đảm bảo được xác định nếu và chỉ khi, đổi tên() cuộc gọi hệ thống có mặt. Tương tự như vậy,
các $ ranlib biến shell sẽ được đặt thành ':' hoặc 'ranlib' tùy thuộc vào việc
gọi đến ranlib chương trình cần thiết để đặt một tệp thư viện. Làm thế nào điều này không hoạt động
quan trọng bây giờ, điều quan trọng là phải hiểu rằng những ký hiệu đó được cung cấp đời sống
(tức là một giá trị) khi Thiết lập chấp hành.

Sử dụng các ký hiệu tương đối đơn giản. Trong tệp nguồn C, bạn chỉ cần sử dụng ký hiệu
giá trị, như một chỉ thị tiền xử lý (ví dụ: #ifdef HAS_RENAME) hoặc, nếu ký hiệu
giá trị là một chuỗi, trực tiếp như bạn sẽ sử dụng macro trong C. Và trong tệp shell hoặc
Makefile, bạn có thể tham chiếu trực tiếp đến một biểu tượng shell.

Thực ra tôi đang nói dối, vì điều đó không hoàn toàn ảo diệu như đoạn trước
có thể âm thanh. Trong tệp C, bạn cần bao gồm Cấu hình được tạo ra cấu hình.h tập tin và
bạn phải bọc tập lệnh shell hoặc Makefile của mình trong tệp .SH và bạn có thể tham chiếu shell
chỉ trong phần thay thế biến của tệp .SH đó. Thêm về điều này sau.

nguồn Các tập tin
Các ký hiệu có thể chỉ xuất hiện trong một tập hợp hạn chế các tệp nguồn, bởi vì siêu cấu hình sẽ chỉ
quét chúng khi tìm kiếm các ký hiệu đã biết, cố gắng tìm ra đơn vị nào nó sẽ cần.
Bạn có thể sử dụng các ký hiệu C trong các tệp nguồn C, tức là các tệp có .c, .h, .y or .l phần mở rộng, và
các ký hiệu shell chỉ được tìm kiếm trong các tệp .SH.

Để nhận được giá trị của một ký hiệu, một tệp C cần phải bao gồm các cấu hình.h
tệp, được sản xuất bởi Thiết lập khi có các ký hiệu C. Và các tệp .SH được chạy
thông qua một trình bao, tạo ra một tệp mới. Tuy nhiên, trong phần trên cùng của tệp .SH,
đặc biệt config.sh tệp (cũng được tạo ra bằng cách chạy Thiết lập) có nguồn gốc và có thể thay đổi
thay thế được áp dụng. Thật, cấu hình.h được tạo ra bằng cách chạy siêu cấu hìnhđã được sản xuất
config_h.SH , một lần nữa sử dụng thay thế biến. Vì vậy, chúng ta sẽ xem xét rằng một
chặt chẽ hơn một chút vì đây là trung tâm của toàn bộ cấu hình kế hoạch...

Biến Thay thế
Có cấu trúc shell được gọi là tại đây tài liệu cho phép một lệnh nhận đầu vào
được chỉ định trong chính tập lệnh. Đầu vào đó được shell diễn giải là một
chuỗi trích dẫn hoặc một chuỗi trích dẫn đơn tùy thuộc vào hình thức của tài liệu tại đây
đặc điểm kỹ thuật.

Để chỉ định một tài liệu ở đây, mã thông báo '<<' được sử dụng, theo sau là một số nhận dạng duy nhất. Từ
sau đó, các dòng script còn lại tạo thành đầu vào cho lệnh, cho đến đây
tài liệu được tìm thấy trên một dòng của chính nó. Thay thế shell (bao gồm cả biến shell
thay thế) được thực hiện trừ khi mã định danh được bao quanh bởi các dấu ngoặc kép. Ví dụ:

var = 'đầu tiên'
tar = 'thứ hai'
echo "-> tài liệu đầu tiên tại đây:"
con mèo <
var = '$ var'
tar = '$ tar'
EOM
echo "-> tài liệu thứ hai tại đây:"
con mèo << 'EOM'
echo $ var
echo $ tar
EOM
echo "-> kết thúc."

sẽ tạo ra, khi chạy qua một trình bao:

-> tài liệu đầu tiên tại đây:
var = 'đầu tiên'
tar = 'thứ hai'
-> tài liệu thứ hai ở đây:
echo $ var
echo $ tar
-> kết thúc.

Tài liệu đầu tiên ở đây có nội dung của nó được diễn giải trong khi tài liệu thứ hai là đầu ra nguyên trạng.
Cả hai đều hữu ích trong tập lệnh .SH, như chúng ta sắp thấy.

Sử dụng .NS Kịch bản
Tập lệnh .SH thường được tạo bằng cách chạy MakeSH script khác một tệp hiện có,
biến đổi hồ sơ thành một tệp.SH. Hãy lấy một ví dụ đơn lẻ. Đây là một kịch bản nhỏ
(hãy gọi nó tăng kích thước) để in một tin nhắn, kích thước của int kiểu dữ liệu trong C.
Thật không may, nó có giá trị được gắn chặt trong đó, do đó:

#!/ Bin / sh
intsize = '4'
echo "Trên máy này, kiểu int là $ intsize byte"

Chạy thôi làmSH trên đó bằng cách gõ 'làmSH tăng kích thước'. Chúng tôi nhận được một intsize.SH nộp nó
trông như thế này:

trường hợp $ CONFIG trong
'')
nếu test -f config.sh; thì TOP = .;
elif kiểm tra -f ../config.sh; thì TOP = ..;
kiểm tra elif -f ../../config.sh; thì TOP = ../ ..;
elif kiểm tra -f ../../../config.sh; thì TOP = ../../ ..;
elif kiểm tra -f ../../../../config.sh; thì TOP = ../../../ ..;
khác
echo "Không tìm thấy config.sh."; lối ra 1
fi
. $ TOP / config.sh
;;
nó C
: Điều này buộc các tệp SH phải tạo mục tiêu trong cùng thư mục với tệp SH.
: Điều này để làm cho phụ thuộc luôn biết tìm các đạo hàm SH ở đâu.
trường hợp "$ 0" trong
* / *) cd `expr X $ 0: 'X \ (. * \) /' ';;
nó C
echo "Đang giải nén intsize (với các thay thế khác nhau)"
: Phần này của tệp sẽ có các thay thế khác nhau được thực hiện trên đó.
: Di chuyển bất cứ thứ gì cần cấu hình đăng ký từ! KHÔNG! BẰNG CHỨNG! phần tới! TRƯỞNG THÀNH! NÀY !.
: Bảo vệ bất kỳ ký hiệu đô la và dấu gạch chéo nào mà bạn không muốn diễn giải
: bằng cách đặt dấu gạch chéo ngược ở phía trước. Bạn có thể xóa những bình luận này.
$ spitshell> intsize <
$ startsh
! TRƯỞNG THÀNH! NÀY!

: Các đô la và dấu gạch chéo sau không cần thêm dấu gạch chéo ngược.
$ spitshell >> intsize << '! KHÔNG! SUBS!'
intsize = '4'
echo "Trên máy này, kiểu int là $ intsize byte"
! KHÔNG! SUBS!
kích thước chmod 755
$ eunicefix intsize

Phần đầu tiên của tập lệnh này (trong trường hợp tuyên bố) đang cố gắng xác định vị trí config.sh
để tạo nguồn cho nó. Các $ CONFIG biến là sai theo mặc định, đúng khi
config.sh đã được lấy nguồn (sẽ là trường hợp nếu tệp này được thực thi từ
ở trong Thiết lập chính nó, nhưng chúng ta đừng nhầm lẫn vấn đề ở đây).

Một khi các config.sh tệp đã là nguồn, tất cả các ký hiệu shell được xác định bởi Thiết lập đang
bộ. Chúng tôi biết đạt được một câu lệnh trường hợp thứ hai, được sử dụng để thay đổi thư mục hiện tại nên
đường dẫn được sử dụng để đến chương trình này (ví dụ: nếu chúng tôi đã nói 'sh ../scripts/intsize.SH', chúng tôi
lần đầu tiên sẽ chạy 'cd ../script'trước khi tiếp tục). Nếu bạn không hiểu điều này, đừng
lo lắng về nó.

Đây là những thứ xen kẽ. Tập lệnh này sử dụng $ spitshell biến, và nó không
một cái gì đó chúng tôi biết về ... chưa. Nếu bạn xem qua tệp Bảng chú giải thuật ngữ, bạn sẽ thấy rằng
đây là một biến được biết đến bởi siêu cấu hình. Nếu bạn biến tệp này thành một phần trong bản phân phối của mình
(bằng cách đưa nó vào tệp MANIFEST.new, chúng ta sẽ quay lại điều đó sau) và chạy
siêu cấu hình, sau đó Thiết lập script sẽ xác định một giá trị phù hợp cho biến này
và nó sẽ được thiết lập trong config.sh. Tương tự với $ startsh và điều bí ẩn $ eunicefix at
kết thúc. Trên một hệ thống hợp lý, phần liên quan của config.sh sẽ trông như thế này:

spitshell = 'con mèo'
startsh = '#!/ Bin / sh'
eunicefix = ':'

Ah! Chúng tôi đang đến đó. Bây giờ nó trông quen thuộc. Chúng tôi đang đối mặt với một làm sao lệnh của ai
đầu vào đến từ một tài liệu được nội suy biến ở đây và đầu ra của nó được chuyển hướng đến
tăng kích thước. Giá trị sẽ là của $ startsh, I E '#!/ Bin / sh'. Tốt cho đến nay.

Sau đó, chúng tôi đến phần mở rộng tài liệu thứ hai ở đây, để lấy phần còn lại của tập lệnh. Cái này
thời gian, biểu tượng tài liệu ở đây được bao quanh bởi dấu ngoặc kép nên nội dung sẽ là
thêm nguyên văn vào tăng kích thước tập tin. Vì vậy, bằng cách chạy 'sh intsize.SH', chúng tôi nhận được
đầu ra sau:

Trích xuất intsize (với sự thay thế khác nhau)

và bằng cách nhìn vào tệp intsize được tạo, chúng tôi thấy:

#!/ Bin / sh
intsize = '4'
echo "Trên máy này, kiểu int là $ intsize byte"

đó chính xác là những gì chúng tôi có lúc đầu. Cho đến nay, đó là một thủ tục không hoạt động ...
Nhưng, kỳ diệu làm sao! Điều đó rất xảy ra (hoàn toàn trùng hợp, hãy tin tôi!), Điều đó siêu cấu hình biết
về $ intsize ký hiệu vỏ. Bằng cách chuyển phần khởi tạo intsize sang biến-
vùng nội suy của tập lệnh .SH và khởi tạo nó bằng Thiết lập-giá trị được tính toán,
và xóa các nhận xét vô dụng hiện được thêm vào bởi làmSH, chúng tôi nhận được:

trường hợp $ CONFIG trong
'')
nếu test -f config.sh; thì TOP = .;
elif kiểm tra -f ../config.sh; thì TOP = ..;
kiểm tra elif -f ../../config.sh; thì TOP = ../ ..;
elif kiểm tra -f ../../../config.sh; thì TOP = ../../ ..;
elif kiểm tra -f ../../../../config.sh; thì TOP = ../../../ ..;
khác
echo "Không tìm thấy config.sh."; lối ra 1
fi
. $ TOP / config.sh
;;
nó C
trường hợp "$ 0" trong
* / *) cd `expr X $ 0: 'X \ (. * \) /' ';;
nó C
echo "Đang giải nén intsize (với các thay thế khác nhau)"
$ spitshell> intsize <
$ startsh
intsize = '$ intsize'
! TRƯỞNG THÀNH! NÀY!

$ spitshell >> intsize << '! KHÔNG! SUBS!'
echo "Trên máy này, kiểu int là $ intsize byte"
! KHÔNG! SUBS!
kích thước chmod 755
$ eunicefix intsize

Tất nhiên, chạy tập lệnh này thông qua một trình bao sẽ lại xuất ra cùng một tập lệnh. Nhưng nếu
chúng ta chạy Thiết lập trên một chiếc máy mà một int được lưu trữ dưới dạng số lượng 64 bit, config.sh sẽ
định tăng kích thước đến 8 và tăng kích thước script sẽ có giá trị phù hợp và in:

Trên máy này, kiểu int là 8 byte

cái nào đúng. Xin chúc mừng! Chúng tôi vừa cấu hình một tập lệnh shell !!

sản xuất cấu hình.h
Bây giờ chúng ta có thể có một cái nhìn về cách cấu hình.h được sản xuất từ config_h.SH. Chúng ta biết rằng
chạy Thiết lập sản xuất một config.sh script (cách thực hiện chính xác là không đúng
có liên quan ở đây, nhưng đối với những người tò mò, đó là một sự thay thế tài liệu khác ở đây trong
Thiết lập chinh no). Các config_h.SH bản thân nó được xây dựng bởi siêu cấu hình cùng một lúc
Thiết lập miễn là bạn sử dụng ít nhất một ký hiệu C trong các nguồn của mình.

Hãy xem một số ngẫu nhiên config_h.SH tập tin để xem điều gì thực sự xảy ra:

trường hợp $ CONFIG trong
'')
nếu test -f config.sh; thì TOP = .;
elif kiểm tra -f ../config.sh; thì TOP = ..;
kiểm tra elif -f ../../config.sh; thì TOP = ../ ..;
elif kiểm tra -f ../../../config.sh; thì TOP = ../../ ..;
elif kiểm tra -f ../../../../config.sh; thì TOP = ../../../ ..;
khác
echo "Không tìm thấy config.sh."; lối ra 1
fi
. $ TOP / config.sh
;;
nó C
trường hợp "$ 0" trong
* / *) cd `expr X $ 0: 'X \ (. * \) /' ';;
nó C
echo "Đang giải nén config.h (với các thay thế khác nhau)"
sed < config.h -e 's! ^ # undef! / define!' -e 's! ^ # un-def! #undef!'
/*
* Tệp này được tạo ra bằng cách chạy tập lệnh config_h.SH,
* nhận các giá trị của nó từ config.sh, thường được tạo bởi
* đang chạy Cấu hình.
*
* Vui lòng sửa đổi bất kỳ điều nào trong số này khi có nhu cầu. Lưu ý, tuy nhiên,
* việc chạy lại config.h.SH sẽ xóa sạch mọi thay đổi bạn đã thực hiện.
* Để có một thay đổi lâu dài hơn, hãy chỉnh sửa config.sh và chạy lại config.h.SH.
*/

/ * Thời gian cấu hình: $ cf_time
* Được định cấu hình bởi: $ cf_by
* Hệ thống mục tiêu: $ myuname
*/

#ifndef _config_h_
#xác định _config_h_

/ * bcopy:
* Biểu tượng này được ánh xạ tới memcpy nếu quy trình bcopy () không phải là
* có sẵn để sao chép chuỗi.
*/
/ * HAS_BCOPY:
* Biểu tượng này được xác định nếu quy trình bcopy () khả dụng cho
* sao chép các khối bộ nhớ. Bạn không nên sử dụng biểu tượng này dưới
* trường hợp bình thường và sử dụng bcopy () trực tiếp để thay thế,
* sẽ được ánh xạ tới memcpy () nếu không có bcopy.
*/
# $ d_bcopy HAS_BCOPY / ** /
#ifndef ĐÃ_BCOPY
#ifdef bcopy
# un-def bcopy
#endif
#define bcopy (s, d, l) memcpy ((d), (s), (l)) / * được ánh xạ tới memcpy * /
#endif

/ * HAS_DUP2:
* Biểu tượng này, nếu được định nghĩa, cho biết rằng quy trình lặp lại
* có sẵn cho các bộ mô tả tệp trùng lặp.
*/
# $ d_dup2 HAS_DUP2 / ** /

/ * I_STRING:
* Biểu tượng này, nếu được định nghĩa, cho biết chương trình C rằng nó phải
* bao gồm (Hệ thống USG) thay vì (Hệ thống BSD).
*/
# $ i_string I_STRING / ** /

#endif
! TRƯỞNG THÀNH! NÀY!

Ở đầu tệp, chúng tôi nhận ra cấu trúc .SH chuẩn mà chúng tôi đã có
đã nghiên cứu chi tiết. Tiếp theo là việc trích xuất chính tệp đó, thông qua tài liệu tại đây với
thay thế biến đổi. Tuy nhiên, ở đây chúng tôi không sử dụng làm sao nhưng một khát thay vào đó, kể từ
chúng tôi cần thực hiện một số chỉnh sửa thêm khi đang di chuyển. Chúng ta sẽ xem lý do tại sao sau này, vì vậy chúng ta hãy quên
về nó ngay bây giờ.

Bây giờ chúng tôi đạt được nhận xét hàng đầu và tệp được gắn thẻ với thời gian cấu hình,
hệ thống mục tiêu, v.v. (những biến đó đến từ nguồn config.sh tập tin đã được
thiết lập bởi Thiết lập). Tiêu đề nhận xét đó được theo sau bởi một bảo vệ '#ifndef' để bảo vệ
chống lại nhiều bao gồm của tệp này. Sau đó, đến trung tâm của tệp ...

Nó giúp để biết rằng $ d_ *$ i_ * các biến được đặt thành 'định nghĩa' hoặc là 'không xác định' qua
Thiết lập, tùy thuộc vào việc một hàm hoặc một tệp bao gồm có trên hệ thống hoặc
không phải. Điều đó có nghĩa là:

# $ d_bcopy HAS_BCOPY / ** /

dòng sẽ được mở rộng thành:

#define HAS_BCOPY / ** /

nếu biến $ d_bcopy được đặt thành 'xác định' hoặc:

#undef HAS_BCOPY / ** /

nếu $ d_bcopy được đặt thành 'undef', vì tính năng này không có ở đó. Tuy nhiên, đó không phải là
những gì được viết trong cấu hình.h tập tin vì khát bộ lọc mà chúng tôi đã thấy,
sẽ chuyển dạng thứ hai thành:

/ * # xác định HAS_BCOPY / ** /

Đó là một biểu mẫu hữu ích để chỉnh sửa sau này cấu hình.h bởi vì bạn chỉ cần xóa
đứng đầu '/ *' nếu bạn muốn ghi đè Thiết lậpsự lựa chọn của. Tương tự như vậy, bạn có thể thêm một
'/ *' ở đầu dòng '#define' để tránh định nghĩa một ký hiệu cụ thể.
Đây là lý do tại sao mỗi định nghĩa biểu tượng được bảo vệ bằng dấu '/ ** /', để đóng phần đầu
bình luận được mở bởi '/ *' (bình luận không được lồng trong C).

Bây giờ chuyển đổi '#undef' thành '/ * # xác định' là tốt, nhưng nếu chúng ta thực sự muốn viết một
'#undef', chúng tôi đang mắc kẹt ... trừ khi chúng tôi viết nó là '# un-def' và để khát sửa nó thành '#undef'
trong khi sản xuất cấu hình.h, đó là những gì thực sự được thực hiện ở đây.

Cùng một kiểu lập luận áp dụng cho hai dòng đó:

# $ d_dup2 HAS_DUP2 / ** /
# $ i_string I_STRING / ** /

và giả định config.sh định nghĩa:

d_dup2 = 'xác định'
i_string = 'undef'

chúng tôi sẽ nhận được trong sản xuất cấu hình.h:

#define HAS_DUP2 / ** /
/ * # xác định I_STRING / ** /

Trong như nước chảy? Tốt!

Bây giờ rõ ràng là bằng cách bao gồm cấu hình.h trong tất cả các tệp nguồn C của bạn, bạn có thể
biết gì không Thiết lập đã đoán trên hệ thống của bạn. Trên thực tế, bằng cách sử dụng những biểu tượng đó, bạn
viết mã C đã định cấu hình, kể từ siêu cấu hình sẽ biết rằng bạn cần những biểu tượng đó và sẽ
tạo ra một phù hợp config_h.SH tệp cũng như tất cả các mã cần thiết trong Thiết lập đến
tính toán một giá trị thích hợp cho chúng (bằng cách gán giá trị cho các biến shell được liên kết).

Chạy siêu cấu hình
Hãy tập trung vào siêu cấu hình chương trình trong một thời gian để hiểu cách nó sử dụng các đơn vị của nó và
mã nguồn của bạn để tạo ra tất cả các tệp cấu hình cần thiết. Nếu bạn có ý định viết mới
bạn nên hiểu rõ về toàn bộ chương trình.

Nếu không có tệp MANIFEST.new, siêu cấu hình sẽ cố gắng sử dụng tệp MANIFEST để thay thế,
cho thuận tiện. Ở bất cứ đâu chúng ta đề cập đến MANIFEST.new, nó có thể được hiểu là MANIFEST
miễn là không có tệp MANIFEST.new nào được tìm thấy ở gốc gói của bạn.

Giả sử tệp MANIFEST.new của bạn được đặt đúng cách và liệt kê tất cả các tệp nguồn mà bạn muốn
cấu hình và bạn đã chạy đóng gói trong thư mục nguồn gốc của bạn để tạo
.Bưu kiện tệp, bạn có thể chạy siêu cấu hình và bạn sẽ nhận được những điều sau:

$ siêu cấu hình
Định vị đơn vị ...
Trích xuất danh sách phụ thuộc từ 312 đơn vị ...
Đang giải nén tên tệp (*. [Chyl] và * .SH) từ MANIFEST.new ...
Xây dựng tệp truy nã ...
Đang quét. [Chyl] tệp để tìm ký hiệu ...
Đang quét các tệp .SH để tìm ký hiệu ...
Tính toán đồ thị phụ thuộc tối ưu ...
Xây dựng tệp tạo riêng tư ...
Xác định đơn vị có thể tải ...
Đang cập nhật tạo tệp ...
Xác định thứ tự chính xác cho các đơn vị ...
Đang tạo cấu hình ...
Xong.

Giai đoạn đầu tiên tìm kiếm tất cả các tệp đơn vị (kết thúc bằng .U) trong thư mục chung
đầu tiên, sau đó là riêng tư của bạn. Nếu bạn sao chép một tệp công khai trong thư mục U riêng tư của mình
(tức là một thư mục có tên U ở cấp cao nhất của gói của bạn), nó sẽ ghi đè
phiên bản. Khi nó có danh sách tất cả các đơn vị khả dụng, nó sẽ phân tích cú pháp chúng và trích xuất tất cả
MAKE: dòng để biết về các phụ thuộc và các ký hiệu shell đã biết. Nó cũng
tập trung vào các dòng? H: để tìm hiểu về các ký hiệu C và những ký hiệu shell nào cần được
được tính toán để có được giá trị thích hợp cho ký hiệu C đó (vì vậy chúng ta có một mức phụ thuộc khác
đây).

Tiếp theo, tên tệp thích hợp được trích xuất từ ​​tệp MANIFEST.new và Muốn tập tin là
được xây dựng: tệp đó liệt kê tất cả các ký hiệu C và các ký hiệu shell cần thiết cho gói đó. chúng tôi
trước tiên hãy quét các tệp loại C để tìm các ký hiệu C, sau đó truyền tải các phần phụ thuộc vào
các ký hiệu shell liên kết (tập hợp từ? H: dòng). Các tệp .SH tiếp theo được quét và cuối cùng
tất cả các ký hiệu shell đã biết.

Một Makefile tạm thời được tạo và metaconfig cố gắng làm cho tất cả các ký hiệu shell để xem
những lệnh nào (được liệt kê ở phần thứ hai? MAKE: lines) được thực thi, và do đó, những đơn vị nào được
thực sự cần thiết. Các đơn vị tùy chọn không được yêu cầu khác sẽ bị loại bỏ và Makefile thứ hai là
được tạo ra. Lần này, chúng tôi biết về tất cả các đơn vị và đơn đặt hàng tương ứng của chúng, tùy chọn
các đơn vị đã bị loại bỏ và các giá trị mặc định được tính cho các ký hiệu shell của chúng. Các
Thiết lập tập lệnh sau đó có thể được tạo, cùng với config_h.SH. Đã được thực hiện.

công ước
Các quy ước thích hợp cần được tuân thủ để làm cho toàn bộ quá trình diễn ra tốt đẹp. Có một trường hợp
quy ước cho các đơn vị và một quy ước đặt tên biến.

Tất cả các đơn vị phải có chữ cái đầu tiên được viết thường, trừ khi chúng là các đơn vị đặc biệt. Qua
đặc biệt, chúng tôi có nghĩa là họ không thực sự xác định các biến shell mới có thể được sử dụng bởi
người dùng trong các tệp .SH của anh ấy, mà là các đơn vị tạo ra các tập lệnh hoặc các biến shell để
được sử dụng trong nội bộ bởi Thiết lập kịch bản. Ví dụ điển hình là ban đầu.U tập tin đó là
khởi tạo biến chính, hoặc Myread.U sản xuất đọc của tôi kịch bản được sử dụng gần như
mọi nơi trong Thiết lập khi một câu hỏi được hỏi cho người dùng.

Các đơn vị không đặc biệt sau đó chia nhỏ thành hai nhóm riêng biệt: các đơn vị xác định biến
được liên kết với một ký hiệu C và các đơn vị xác định các biến shell của riêng chúng. Nhóm đầu tiên
được chia nhỏ hơn trong các biến liên quan đến tệp bao gồm (tên của chúng bắt đầu bằng i_) Và
các biến liên quan đến các định nghĩa khác (tên bắt đầu bằng d_). Nhóm thứ hai có
ví dụ: tên đứng cho chính nó cc.U định nghĩa $ cc biến shell có giá trị là
trình biên dịch C sẽ được sử dụng.

Các đơn vị đặc biệt đôi khi dự trữ cho mình một số biến được xác định trước và trả về "kết quả"
trong các biến nổi tiếng khác. Ví dụ, đọc của tôi kịch bản do Myread.U sản xuất
mong đợi lời nhắc trong $ rp, câu trả lời mặc định trong $ dflt và đặt câu trả lời của người dùng vào $ ans.
Điều này không được ghi lại trong trang hướng dẫn sử dụng này: bạn phải đi và xem xét bản thân thiết bị để
hiểu biến nào được sử dụng và đơn vị sẽ được sử dụng như thế nào.

Sử dụng Sản phẩm Thuật ngữ
Tệp Bảng chú giải thuật ngữ được tạo tự động bởi trang điểm script, trích xuất
thông tin từ? S:,? C: và? MAKE: dòng và định dạng lại chúng thành một thứ tự bảng chữ cái
bảng chú giải đã sắp xếp. Điều quan trọng là phải đọc Bảng chú giải thuật ngữ để biết về các ký hiệu bạn đang có
được phép sử dụng. Tuy nhiên, Bảng chú giải thuật ngữ sẽ không cho bạn biết cách sử dụng chúng. Thông thường, đó là
tùy thuộc vào bạn.

Một ngày nào đó, bạn có thể sẽ viết các đơn vị của riêng mình và bạn sẽ biết đủ về siêu cấu hình
để làm như vậy một cách nhanh chóng và hiệu quả. Tuy nhiên, đừng bao giờ quên ghi lại công việc của bạn một cách hợp lý
các dòng? S: và? C: hoặc người khác sẽ không thể sử dụng lại nó. Hãy nhớ về
thời gian mà bạn chỉ có Bảng chú giải thuật ngữ và trang hướng dẫn sử dụng này để bắt đầu.

Kết luận
Bây giờ bạn đã biết siêu cấu hình những điều cơ bản, bạn nên đọc MÔ TẢ phần, sau đó
bỏ qua THAM KHẢO để tìm hiểu về tất cả các chi tiết đẫm máu, chẳng hạn như
cú pháp cho các dòng điều khiển đơn vị (các dòng bắt đầu bằng dấu '?') hoặc các lệnh MAKE riêng biệt
bạn được phép sử dụng.

THAM KHẢO


Phần này ghi lại nội dung của siêu cấu hình, về cơ bản là cú pháp đơn vị, đặc biệt
các đơn vị bạn nên biết và các tệp gợi ý.

Tổng Quát đơn vị cú pháp
Một đơn vị metaconfig được chia thành hai phần riêng biệt. Phần tiêu đề (dòng bắt đầu
với '?') và một phần shell (mã được đưa vào Thiết lập kịch bản). Nó là
Có thể thêm các nhận xét '? X:' vào bất kỳ đâu trong đơn vị, nhưng các nhận xét khác '?' dòng (cũng
gọi là điều khiển dòng) có một chính sách đặt hàng nghiêm ngặt.

Nếu dòng điều khiển quá dài, có thể sử dụng phần tiếp theo bằng cách thoát khỏi dòng cuối cùng
dòng mới có dấu gạch chéo ngược và tiếp tục ở dòng tiếp theo (sau đó sẽ được thụt lề
bởi dấu cách hoặc tab).

Sau đây là mô tả chính thức của từng dòng điều khiển. Trừ khi được nói rõ
nếu không, thứ tự của bản trình bày này là thứ tự được sử dụng trong đơn vị.

? RCS: tự do văn bản
Để được sử dụng cho các nhận xét RCS, ở trên cùng của đơn vị.

?NS: bất kì văn bản
Nhận xét mục đích chung. Có thể xuất hiện ở bất kỳ đâu trong đơn vị nhưng phải được để nguyên.
Đối với nhận xét RCS, vui lòng sử dụng? RCS: biểu mẫu nhận xét.

?CHẾ TẠO:biểu tượng : phụ thuộc [+ tùy chọn]
Đây là dòng phụ thuộc đầu tiên. Người đầu tiên biểu tượng nên liệt kê tất cả các ký hiệu
được xây dựng bởi đơn vị này (nghĩa là giá trị của nó được tính bằng phần vỏ của đơn vị).
Các ký hiệu nên được phân cách bằng dấu cách. Nếu một ký hiệu đã xác định chỉ dành cho mục đích sử dụng nội bộ và
không nên xuất hiện trong config.sh tệp, sau đó nó phải được đặt trước
'+' (không nên nhầm lẫn với các phụ thuộc tùy chọn được định nghĩa sau đây). Thư hai
một phần của danh sách (sau phần giữa ':') là đơn vị phụ thuộc. Nó sẽ liệt kê tất cả
các đơn vị đặc biệt cần thiết, cũng như tất cả các ký hiệu được sử dụng bởi shell
thực hiện. Nếu một biểu tượng được mã hóa nhưng giá trị cấu hình của nó không quan trọng, nó
có thể đứng trước dấu '+', trong trường hợp đó nó được gọi là phụ thuộc có điều kiện:
đơn vị tương ứng sẽ được tải nếu và chỉ khi, ký hiệu đó thực sự
truy nã; nếu không giá trị mặc định sẽ được sử dụng.

?CHẾ TẠO:chuyển hướng lệnh
Có thể có một hoặc nhiều dòng lệnh theo sau các dòng phụ thuộc ban đầu. Những thứ kia
các lệnh sẽ được thực thi khi đơn vị muốn tải chúng vào Thiết lập. Thấy
đoạn văn về lệnh thực hiện để biết thêm thông tin. Lưu ý rằng hàng đầu chuyển hướng
ký tự được yêu cầu trước lệnh.

? Y:bố trí
Khai báo chỉ thị bố trí cho đơn vị này. Chỉ thị đó có thể là một trong các chuỗi
hàng đầu, mặc định or dưới cùng (trường hợp không thành vấn đề, phong cách được khuyến nghị là viết chúng ra
viết hoa). Nếu bỏ qua, mặc định được giả định.

Chỉ thị này chỉ bắt buộc nếu bạn muốn buộc một đơn vị ở trên cùng hoặc dưới cùng
trong số những thứ được tạo ra Thiết lập script, vì các phụ thuộc đơn vị cho phép nó. Quan trọng
do đó, câu hỏi có thể bị ép buộc ngay từ đầu. Trong cùng một lớp bố cục, các đơn vị
được sắp xếp theo thứ tự bảng chữ cái với hai trường hợp đặc biệt cho các đơn vị d_ * và i_ *, bắt buộc
tương ứng ở đầu và cuối lớp của chúng (nhưng chúng phải thuộc về
lớp mặc định).

Bạn buộc ở trên cùng một đơn vị có sự phụ thuộc yêu cầu tất cả các đơn vị khác
trước nó, bạn không đạt được điều gì thú vị. Do đó, chỉ thị đó thực sự nên
được sử dụng để tăng mức độ ưu tiên của một số đơn vị tương tác không phụ thuộc vào nhiều
các biểu tượng người dùng có thể nhìn thấy khác, như các câu hỏi liên quan đến đường dẫn.

?NS:ký hiệu_tên [(lỗi thời biểu tượng )]:
Giới thiệu một biểu tượng vỏ. Dòng đầu tiên này đặt tên cho biểu tượng, theo sau là một
danh sách được đặt giữa dấu ngoặc đơn và đưa ra giá trị tương đương đã lỗi thời. Những lỗi thời
các biểu tượng sẽ được ánh xạ lại thành mới ký hiệu_tên nếu -o tùy chọn được trao cho
siêu cấu hình.

?NS:bất kì văn bản, cho Thuật ngữ
Về cơ bản, một nhận xét mô tả biểu tượng shell, sẽ được trích xuất bằng trang điểm
vào tệp Bảng chú giải thuật ngữ.

?NS:. Đóng nhận xét biểu tượng vỏ.

?NS:ký hiệu_tên [~ bí danh] [(lỗi thời biểu tượng )]:
Giới thiệu một ký hiệu C mới. Các bí danh tên là tên mà ký hiệu C sẽ
được kiểm soát, tức là nếu bí danh ký hiệu là muốn, sau đó ký hiệu C đó sẽ được viết
trong config_h.SH tập tin. Thông thường, bí danh chỉ là '% <' (viết tắt của tên đơn vị)
và cũng có một? W: dòng ánh xạ một ký hiệu C đến bí danh. Ngoài ra các bộ phận liên quan
của các dòng? H: được bảo vệ rõ ràng bằng điều kiện '?% <'. Xem biểu tượng
đoạn bí danh để biết thêm chi tiết. Phần còn lại của dòng là tùy chọn
lỗi thời biểu tượng , trong đó liệt kê các điểm tương đương cũ cho ký hiệu_tên.

?NS:bất kì văn bản, cho Thuật ngữ config_h.SH
Về cơ bản, một nhận xét mô tả ký hiệu C, sẽ được trích xuất bằng trang điểm
vào tệp Bảng chú giải thuật ngữ và bằng cách siêu cấu hình vào config_h.SH tập tin nếu ký hiệu là
muốn (hoặc nếu bí danh của nó được muốn khi sử dụng bí danh ký hiệu).

?NS:. Đóng nhận xét ký hiệu C.

?NS:?biểu tượng:config_h.SH công cụ
Đây là yêu cầu bao gồm chung vào config_h.SH. Dòng chỉ được viết khi
bảo vệ biểu tượng là thực sự muốn. Dạng tổng quát này là cần thiết khi ký hiệu C
răng cưa đã được sử dụng. Ngược lại, nếu bạn sử dụng một trong các biểu mẫu "tiêu chuẩn" khác,
việc canh gác được thực hiện tự động bởi siêu cấu hình chính nó.

?NS:#$ d_var VAR "$ var"
Có điều kiện xác định VAR Ký hiệu C thành $ var khi nào được đặt thành 'định nghĩa'. Ngụ ý một
'?VAR: 'điều kiện bảo vệ, và siêu cấu hình tự động liên kết VAR đến hai vỏ của nó
phụ thuộc biến (nghĩa là cả hai $ d_var$ var sẽ được gắn cờ là muốn if VAR is
được sử dụng trong các nguồn C).

? H: #define VAR [không bắt buộc văn bản]
Luôn xác định VAR Ký hiệu C đến một giá trị nào đó. Ngụ ý một '?VAR: 'điều kiện canh gác.
Sự phụ thuộc của trình bao tự động được thực hiện đối với chính thiết bị.

? H: #define VAR (x, y, z) $ var
Luôn xác định macro VAR là giá trị của $ var Biến đổi. Nó phụ thuộc vào
đơn vị đảm bảo $ var giữ một giá trị hợp lý. Sự phụ thuộc tự động giữa C
vĩ mô VAR và biến shell được thiết lập và toàn bộ dòng được bảo vệ bởi một
ngầm hiểu?VAR: '.

?NS:#$ d_var VAR
Xác định có điều kiện VAR if $ d_var được đặt thành 'định nghĩa'. Ngụ ý một '?VAR:' canh gác
tình trạng. Sự phụ thuộc của trình bao tự động được tạo ra theo hướng $ d_war.

? H: #define VAR "$ var"
Gán một giá trị đã định cấu hình cho VAR Ký hiệu C. Ngụ ý một '?VAR: 'điều kiện gurading.
Một phụ thuộc shell tự động được tạo ra để liên kết VAR$ var.

?NS:. Đóng config_h.SH yêu cầu bao gồm.

?NS:C biểu tượng: C phụ thuộc
Giới thiệu định nghĩa ma thuật liên quan đến ký hiệu C, cho confmagic.hvà xác định
biểu tượng canh gác cho phần còn lại? M: định nghĩa. Dòng này ngầm ngụ ý
'? W:% <:C biểu tượng', tức là đơn vị sẽ được tải vào Cấu hình nếu biểu tượng C xuất hiện
trong các nguồn C, cho dù phép thuật có được sử dụng hay không. Các phụ thuộc C được kích hoạt
khi phép thuật được sử dụng, để buộc định nghĩa của chúng trong config_h.SH. Tuy nhiên, nếu
phép thuật là không được sử dụng nhưng ký hiệu C xuất hiện trong nguồn mà không có chữ C cần thiết
phụ thuộc, bạn sẽ được cảnh báo mỗi khi tệp Wanted được tạo, vì nó có thể
vấn đề về tính di động (và cũng vì thiết bị được tải vô điều kiện vào
Định cấu hình bất cứ khi nào ký hiệu C được sử dụng, không phụ thuộc vào các dòng khác? C: từ
đơn vị).

?NS:cpp phản đối
Xác định ánh xạ cpp ma thuật sẽ được giới thiệu trong confmagic.h bất cứ khi nào có liên quan
ký hiệu được sử dụng. Có một ẩn ý?sym'canh gác ở đâu sym là tên biểu tượng
được xác định bởi dòng đứng đầu? M:.

?NS:. Đóng confmagic.h yêu cầu bao gồm.

? W:shell biểu tượng :C biểu tượng
Liên kết số phận của các ký hiệu vỏ với các ký hiệu C: nếu có trong số C
các ký hiệu được liệt kê là muốn, sau đó tất cả các ký hiệu shell được đánh dấu là muốn. Hữu ích cho
buộc bao gồm một đơn vị (danh sách ký hiệu shell được đặt thành '% <') khi sự hiện diện của một số C
biểu tượng được phát hiện. Danh sách biểu tượng vỏ có thể để trống, để hưởng lợi từ phía
ảnh hưởng của vị trí ký hiệu C trong bộ tiền xử lý nội trang (ký hiệu là xác định
cho bộ xử lý trước đó nếu nằm trong nguồn). Để tìm kiếm các mẫu có khoảng trắng
trong chúng, bạn cần phải trích dẫn các ký hiệu C trong các dấu ngoặc kép đơn giản, như trong 'struct
Múi giờ'.

? V:chỉ đọc biểu tượng:đọc viết biểu tượng
Đây là một kim loại gợi ý và chỉ nên được sử dụng trong các đơn vị đặc biệt xuất một số shell
biến. Các biến trước dấu giữa ':' được xuất ở chế độ chỉ đọc (thay đổi chúng
sẽ đưa ra cảnh báo), trong khi các ký hiệu khác có thể được đọc và thay đổi tự do.

?NS:các tập tin tạo ra
Dòng này phục vụ hai mục đích: nó là một kim loại gợi ý và cũng là một trình giữ chỗ cho
tương lai làm gì sử dụng. Nó phải liệt kê ba loại tệp: tệp tạm thời
được tạo để kiểm tra, các UU riêng tư được tạo trong thư mục UU để sử dụng sau này
perusal và những cái công khai còn lại trong thư mục gốc của gói. Tạm thời
các tệp phải được liệt kê với một '!' trước đó ký tự (nghĩa là "không! chúng không được sử dụng lại
sau! "), các tệp UU riêng tư phải được đặt trước bằng './' (nghĩa là: để sử dụng chúng, hãy nói
./tập tin, Không chỉ hồ sơ), và những cái công khai phải được đặt tên như hiện tại.

?NS:shell thời gian tạm thời
Một kim loại gợi ý. Dòng này liệt kê tất cả các biến shell được sử dụng làm thời gian tạm thời
trong phần vỏ của đơn vị này.

?NS:biểu tượng='giá trị'
Giá trị khởi tạo cho các ký hiệu được sử dụng làm phụ thuộc có điều kiện. Nếu không? D: dòng là
được tìm thấy, sau đó giá trị null được sử dụng thay thế. Các kim loại chương trình sẽ cảnh báo bạn nếu
biểu tượng được sử dụng ít nhất một lần như một phụ thuộc có điều kiện và không có
? D: khởi tạo. Đó là một thực tiễn tốt để thêm các dòng đó ngay cả khi giá trị rỗng
khởi tạo vì nó nhấn mạnh vào tính chất có thể tùy chọn của một biểu tượng.

? O:bất kì tin nhắn bạn muốn
Chỉ thị này chỉ ra rằng toàn bộ đơn vị này đã lỗi thời. Bất cứ khi nào sử dụng bất kỳ
các ký hiệu của nó được thực hiện (hoặc sử dụng gián tiếp thông qua các phụ thuộc), thông báo được xuất trên
màn hình (trên stderr). Bạn có thể đặt thêm một dòng quặng nữa, trong trường hợp đó, mỗi dòng sẽ
được in, theo thứ tự.

? LINT:kim loại gợi ý
Xem kim loại trang hướng dẫn sử dụng để giải thích các gợi ý khác biệt có thể
đã sử dụng.

?TRONG ĐÓ:khởi tạo
Mã khởi tạo được chỉ định bởi dòng này sẽ được tải ở đầu
Thiết lập kịch bản cung cấp đơn vị là cần thiết.

C Răng cưa
Đôi khi không thể dựa vào siêu cấu hìnhlựa chọn mặc định của riêng cho config_h.SH
nhận xét và định nghĩa ký hiệu C. Đó là nơi mà răng cưa phát huy tác dụng. Vì nó đúng hơn
khó giải thích, chúng tôi sẽ nghiên cứu một ví dụ để hiểu cơ chế cơ bản.

Đơn vị d_const.U cố gắng xác định xem trình biên dịch C của bạn có biết về const
từ khóa. Nếu không, chúng tôi muốn ánh xạ lại từ khóa đó thành một chuỗi rỗng, để cho phép
biên dịch chương trình. Hơn nữa, chúng tôi muốn tự động kích hoạt kiểm tra khi const lời
Được sử dụng.

Dưới đây là các phần liên quan của đơn vị d_const.U:

? MAKE: d_const: cat cc ccflags Setvar
? MAKE: -chọn thêm $ @%
? S: d_const:
? S: Biến này xác định có điều kiện ký hiệu HASCONST,
? S: chỉ ra với chương trình C rằng trình biên dịch C này biết về
? S: kiểu const.
?NS:.
? C: HASCONST ~% <:
? C: Biểu tượng này, nếu được định nghĩa, cho biết rằng trình biên dịch C này biết về
? C: kiểu const. Không cần thực sự kiểm tra ký hiệu đó
? C: trong các chương trình của bạn. Việc chỉ sử dụng từ khóa "const" sẽ
? C: kích hoạt các thử nghiệm cần thiết.
?NS:.
? H:?% <: # $ D_const HASCONST / ** /
? H:?% <: # Ifndef HASCONST
? H:?% <: # Xác định const
? H:?% <: # Endif
?NS:.
? W:% <: const
? LINT: đặt d_const
? LINT: const đã biết
: kiểm tra từ khóa const
echo ""
echo 'Kiểm tra xem trình biên dịch C của bạn có biết về "const" ...'> & 4 hay không
/ bin / cat > const.c << 'EOCP'
chủ yếu()
{
const char * foo;
}
EOCP
nếu $ cc -c $ ccflags const.c> / dev / null 2> & 1; sau đó
val = "$ xác định"
echo "Đúng vậy."
khác
val = "$ undef"
echo "Không, không."
fi
đặt d_const
eval $ setvar

Đầu tiên, chúng tôi nhận thấy việc sử dụng dòng? W:, về cơ bản cho biết: "Đơn vị này được sử dụng khi
const từ khóa được sử dụng trong tệp C. ". Để bản đồ lại có điều kiện const thành null
xâu vào cấu hình.h, Tôi đã chọn xác định có điều kiện HASCONST thông qua $ d_const.

Tuy nhiên, điều này làm nảy sinh một vấn đề, bởi vì HASCONST biểu tượng sẽ không được sử dụng trong
nguồn, chỉ const mã thông báo là. Và dòng? H: xác định HASCONST là ẩn ý
được bảo vệ bởi '? HASCONST'. Do đó, chúng ta phải thêm ràng buộc '?% <' Rõ ràng để cho biết
siêu cấu hình rằng những dòng đó nên được đưa vào config_h.SH bất cứ khi nào ký hiệu '% <'
bị truy nã (% <đề cập đến tên của đơn vị, tại đây d_const).

Điều đó gần như hoàn hảo, bởi vì dòng? W: sẽ muốn d_const bất cứ khi nào const được sử dụng, sau đó
các dòng? H: sẽ được đưa vào config_h.SH tập tin. Tuy nhiên, nhận xét hàng đầu (? C:
dòng) đính kèm với HASCONST bản thân nó cũng được bảo vệ thông qua HASCONST, tức là nó có một
Ràng buộc '? HASCONST'. Do đó nhu cầu về răng cưa các HASCONST ký hiệu thành '% <'.

Phần còn lại của đơn vị (phần vỏ) thực sự rất đơn giản. Nó đơn giản
cố gắng biên dịch một chương trình C mẫu bằng cách sử dụng const từ khóa. Nếu nó có thể, thì nó sẽ
định nghĩa $ d_const thông qua $ setvar fonction (được định nghĩa bởi Setvar.U đơn vị). Xem đoạn văn
về các đơn vị đặc biệt để biết thêm chi tiết.

Hãy Lệnh
Trên dòng lệnh? MAKE:, bạn có thể viết một lệnh shell để được thực thi nguyên trạng hoặc
đặc biệt -chọn lệnh bị mắc kẹt bởi siêu cấu hình và phân tích cú pháp để xem những gì nên
xong. '-' hàng đầu chỉ ở đó để ngăn chặn làm cho khỏi thất bại khi lệnh trả về
trạng thái khác XNUMX - nó không thực sự cần thiết vì chúng tôi sử dụng 'làm cho -n'để giải quyết
phụ thuộc, nhưng tôi khuyên bạn nên giữ nó trong trường hợp nó trở thành bắt buộc trong các phiên bản sau.
Cú pháp của chọn lệnh là:

-chọn cmd $@ tập tin mục tiêu

Ở đâu $@ là macro tiêu chuẩn trong Makefiles đại diện cho mục tiêu hiện tại (tên
của thiết bị đang được xây dựng, với phần mở rộng .U cuối cùng bị tước bỏ). Các cmd một phần là
thực tế siêu cấu hình lệnh được chạy, và tập tin mục tiêu là một tham số khác, có
sự giải thích phụ thuộc vào cmd chinh no. Nó cũng bị tước bỏ phần mở rộng .U cuối cùng và
thường đề cập đến một tệp đơn vị, trừ khi nó bắt đầu bằng './', trong trường hợp đó, nó tham chiếu đến một
của siêu cấu hình kiểm soát các tệp trong '.MT thư mục.

Các lệnh có sẵn là:

thêm Thêm tập tin mục tiêu đến Thiết lập.

thêm.Config_sh
Điền vào phần đó của Thiết lập sản xuất config.sh tập tin. Chỉ được sử dụng
các biến được thêm vào, các biến có điều kiện (từ các phụ thuộc có điều kiện) là
bỏ qua.

add.Null Thêm phần khởi tạo tất cả các biến shell được sử dụng cho một chuỗi rỗng.

c_h_weed Sản xuất config_h.SH tập tin. Chỉ những dòng cần thiết mới được in.

cm_h_weed Sản xuất confmagic.h tập tin. Chỉ những dòng cần thiết mới được in. Cái này
lệnh chỉ được kích hoạt khi -M chuyển đổi được đưa ra, hoặc khi một confmagic.h hồ sơ
đã tồn tại.

đóng.Config_sh
Thêm ký hiệu 'EOT' cuối cùng trên một dòng để kết thúc tài liệu tại đây
xây dựng sản xuất config.sh tập tin.

thêm trước Thêm nội dung của mục tiêu vào tập tin mục tiêu nếu tệp đó không trống.

weed Thêm đơn vị vào Thiết lập như thêm vào lệnh, nhưng hãy thực hiện một số thử nghiệm bổ sung
để loại bỏ '?biểu tượng' và '%biểu tượng'dòng từ tập tin mục tiêu nếu biểu tượng
không bị truy nã hoặc truy nã có điều kiện. Biểu mẫu '%' chỉ được sử dụng trong nội bộ
siêu cấu hình trong khi tạo các tệp .U của riêng nó trong '.MT' danh mục.

lau Tương tự như thêm vào thực sự, nhưng thực hiện một thay thế vĩ mô bổ sung. Các
các macro có sẵn được mô tả trong Hardwired Macros đoạn văn.

Như một lưu ý phụ, siêu cấu hình tạo ra một -cond ra lệnh nội bộ để đối phó với điều kiện
sự phụ thuộc. Bạn không nên sử dụng nó một mình, nhưng bạn sẽ thấy nó nếu quét
tạo ra makefile trong .MT thư mục.

Hardwired Macros
Các macro sau được công nhận bởi lau lệnh và thay thế trước khi đưa vào
Thiết lập:

Số sửa đổi cơ bản của gói, bắt nguồn từ .Bưu kiện.

Ngày hiện tại.


Địa chỉ e-mail của người duy trì gói này, bắt nguồn từ
.Bưu kiện.


Tên của gói, bắt nguồn từ .Bưu kiện tập tin.


Mức độ vá lỗi của siêu cấu hình chương trình (không dùng nữa thay vì ).


Mức sửa đổi SVN của siêu cấu hình chương trình.

Số phiên bản của siêu cấu hình chương trình.

Những macro đó chủ yếu được sử dụng để xác định siêu cấu hình phiên bản tạo ra một
riêng Thiết lập script và nó đã được thực hiện cho gói nào. Địa chỉ e-mail của
người bảo trì được cài đặt sẵn trong các hướng dẫn hàng đầu Thiết lập bản in khi bắt đầu.

mới đây siêu cấu hình phiên bản hiểu cú pháp tổng quát hơn của biểu mẫu:

<$ biến>

được thay thế tại thời gian tạo cấu hình bằng giá trị của biến lấy từ của bạn
.Bưu kiện tập tin. Cuối cùng, định dạng macro được nối cứng cũ sẽ biến mất và <$ baserev>
sẽ thay thế lại trong tất cả các đơn vị được cung cấp.

Reduct ® Các đơn vị
Các đơn vị đặc biệt sau được sử dụng để phân tích mã và cung cấp cấp độ cao hơn
các chức năng. Họ hoặc tạo ra một tập lệnh shell có thể được lấy từ nguồn hoặc một shell
biến có thể được đánh giá'ed. Việc truyền tham số được thực hiện thông qua các biến đã biết rõ
được đặt tên hoặc ẩn danh như $ 1, $ 2, v.v. (có thể dễ dàng đặt qua shell định
nhà điều hành). Khi nào Thiết lập thực thi, nó tạo và đi vào một UU thư mục, vì vậy mọi
tập lệnh sản xuất nằm trong đó và không can thiệp vào các tệp từ gói của bạn.

Dưới đây là các đơn vị riêng mà bạn nên biết và cách sử dụng chúng.

Cppsym.U
Đơn vị này tạo ra một tập lệnh shell được gọi là cppsym, có thể được sử dụng để xác định
cho dù bất kỳ ký hiệu nào trong danh sách được xác định bởi bộ tiền xử lý C hoặc trình biên dịch C mà bạn có
được chỉ định. Nó có thể xác định trạng thái của bất kỳ biểu tượng nào, mặc dù các biểu tượng trong
(danh sách thuộc tính) được xác định dễ dàng hơn.

Csym.U
Điều này đặt biến shell $ csym, được sử dụng nội bộ bởi Thiết lập để kiểm tra xem một
cho trước ký hiệu C được xác định hay không. Một cách sử dụng điển hình là:

đặt kết quả biểu tượng [-fva] [trước đó]
eval $ csym

Điều đó sẽ thiết lập kết quả biến thành 'true' nếu hàm [-f], biến [-v] hoặc
mảng [-a] được xác định, ngược lại là 'false'. Nếu một giá trị trước đó được đưa ra và -r
công tắc đã được cung cấp cho Thiết lập (Xem Thiết lập Các lựa chọn đoạn văn), sau đó
giá trị được sử dụng lại mà không cần đặt câu hỏi.

Cách tính toán này được thực hiện tùy thuộc vào câu trả lời mà người dùng đưa ra cho câu hỏi
Thiết lập sẽ hỏi về việc liệu nó có nên thực hiện một nm chiết xuất hay không. Nếu
phép trích xuất đã được thực hiện, đơn vị chỉ cần xem qua danh sách ký hiệu, nếu không
nó thực hiện kiểm tra liên kết biên dịch, trừ khi -r đã được đưa ra để sử dụng lại
giá trị, tự nhiên ...

kết thúc.U
Bằng cách sao chép đơn vị này vào riêng tư của bạn U thư mục và phụ thuộc thêm vào
? MAKE: dòng, bạn có thể buộc một đơn vị cụ thể được tải vào Thiết lập ngay cả khi nó không phải là
nếu không muốn. Một số đơn vị chỉ có thể bị buộc vào Thiết lập theo cách đó.

Filex.U
Đơn vị này tạo ra một tập lệnh shell filexp sẽ mở rộng tên tệp bắt đầu bằng
dấu ngã. Một cách sử dụng điển hình là:

exp_name = `. / filexp $ name`

để gán tên tệp mở rộng trong tên kinh nghiệm.

Findhdr.U
Đơn vị này sản xuất một tìm hdr script được sử dụng để định vị các tệp tiêu đề trong
$ usrinc hoặc những nơi xa lạ khác sử dụng khả năng cpp. Tập lệnh được đưa ra
bao gồm tên cơ sở của tệp như 'stdio.h' hoặc 'sys / file.h' và nó trả về đường dẫn đầy đủ của
tệp inlcude và trạng thái XNUMX nếu được tìm thấy hoặc một chuỗi trống và trạng thái khác XNUMX
nếu tệp không thể được định vị.

Getfile.U
Đơn vị này tạo ra một chút mã shell phải có nguồn gốc để lấy tệp
đặt tên và thực hiện một số kiểm tra sự tỉnh táo. Tùy chọn, mở rộng tên ~ được thực hiện.

Để sử dụng đơn vị này, $ rp$ dflt phải giữ câu hỏi và câu trả lời mặc định,
sẽ được chuyển theo nguyên trạng đọc của tôi script (xem sắp tới Myread.U). Các $ fn
biến điều khiển hoạt động và kết quả được trả về $ ans.

Để định vị một tệp hoặc thư mục, hãy đặt 'f' hoặc 'd' vào f ~ /. Nếu '~' xuất hiện, thì ~ tên
được phép thay thế. Nếu '/' xuất hiện, chỉ những tên đường dẫn tuyệt đối mới được chấp nhận và
~ tên thay thế luôn được mở rộng trước khi trả về. Nếu '+' được chỉ định,
kiểm tra sự tồn tại bị bỏ qua. Nếu 'n' xuất hiện trong $ fnthì người dùng được phép
trả lời 'không'.

Thông thường, trừ khi bạn yêu cầu tính di động, thay thế tên ~ sẽ xảy ra khi được yêu cầu.
Tuy nhiên, có một số lần bạn muốn bỏ qua tính di động và buộc
thay thế. Bạn có thể sử dụng chữ cái 'e' (mở rộng) để làm điều đó.

Nếu loại 'l' (định vị) đặc biệt được sử dụng, thì $ fn biến phải kết thúc bằng ':',
theo sau là tên cơ sở tệp. Nếu câu trả lời là một thư mục, tên cơ sở của tệp sẽ là
được nối trước khi kiểm tra sự tồn tại của tệp. Điều này hữu ích trong các câu hỏi kiểu định vị
như thế này:

dflt = '~ news / lib'
: không cần chỉ định 'd' hoặc 'f' khi 'l' được sử dụng
fn = 'l ~: hoạt động'
rp = 'Tệp đang hoạt động ở đâu?'
. ./có được file
active = "$ ans"

Ngoài ra, chữ cái 'p' (đường dẫn) có thể được sử dụng cùng với 'l' để nói
có được file rằng một câu trả lời không có '/' trong nó phải được chấp nhận, giả sử rằng nó sẽ
ở trong PATH của mọi người tại thời điểm giá trị này sẽ cần thiết.

Cũng hữu ích là khả năng chỉ định một danh sách các câu trả lời nên được chấp nhận
nguyên văn, bỏ qua tất cả các kiểm tra. Danh sách này phải nằm trong ngoặc đơn và các mục
phải được phân cách bằng dấu phẩy, không có dấu cách xen kẽ. Đừng quên trích dẫn
chuỗi kết quả vì dấu ngoặc có ý nghĩa đối với trình bao. Ví dụ:

dflt = '/ bin / install'
fn = '/ fe ~ (install,. / install)'
rp = 'Sử dụng chương trình cài đặt nào?'
. ./có được file
cài đặt = "$ ans"

sẽ cho phép người dùng chỉ xác định các đường dẫn đủ điều kiện tham chiếu đến các tệp hiện có,
nhưng vẫn cho phép các câu trả lời đặc biệt "cài đặt" và "./install" nguyên trạng (giả sử
tất nhiên một điều gì đó sẽ giải quyết đặc biệt với họ sau này trong chuỗi kể từ khi họ làm
không phù hợp với khung dự kiến ​​chung).

Nếu câu trả lời cho câu hỏi là 'không', thì kiểm tra sự tồn tại sẽ bị bỏ qua và
chuỗi trống được trả về. Lưu ý rằng kể từ có được file cuộc gọi đọc của tôi trong nội bộ, tất cả
các tính năng có sẵn với đọc của tôi nộp đơn tại đây cho.

Nếu cần một giá trị được mở rộng hoàn toàn (ví dụ như trong Makefile), bạn có thể sử dụng
các $ ansexp biến luôn được thiết lập đúng bởi có được file khi mở rộng
phiên bản $ ans. Tất nhiên, nó sẽ không mở rộng ~ tên nếu bạn không cho phép điều đó trong
vị trí đầu tiên trong $ fn biến.

Inhdr.U
Đơn vị này sản xuất $ inhdr biến shell, được sử dụng nội bộ bởi Thiết lập để kiểm tra
cho dù một tập hợp các tiêu đề tồn tại hay không. Một cách sử dụng điển hình là:

đặt tiêu đề i_header [header2 i_header2 ...]
eval $ inhdr

Điều đó sẽ in ra một thông báo, cho biết liệu tiêu đề có được tìm thấy hay không và đặt
i_tiêu đề biến tương ứng. Nếu nhiều hơn một tiêu đề được chỉ định và tiêu đề đầu tiên
không tìm thấy tiêu đề, chúng tôi thử tiêu đề tiếp theo, cho đến khi danh sách trống hoặc tìm thấy một tiêu đề.

Inlibc.U
Đơn vị này sản xuất $ inlibc biến shell, được sử dụng nội bộ bởi Thiết lập để kiểm tra
cho dù một hàm C đã cho có được xác định hay không. Một cách sử dụng điển hình là:

đặt hàm d_func
eval $ inlibc

Điều đó sẽ in ra một thông báo, cho biết chức năng đã được tìm thấy hay chưa và thiết lập
$ d_func cho phù hợp. Trong nội bộ, nó đã sử dụng $ csym công Việt Hằng ngày.

Lộc.U
Đơn vị quan trọng này tạo ra một tập lệnh shell loc có thể được sử dụng để tìm ra nơi
trong danh sách các thư mục, một tệp nhất định nằm. Đối số đầu tiên chỉ định tệp thành
được xác định vị trí, đối số thứ hai là những gì sẽ được trả về nếu tìm kiếm không thành công và
các đối số reamining là danh sách các thư mục nơi tệp sẽ được tìm kiếm. Vì
ví dụ:

dflt = `. / loc sendmail.cf X / Usr / lib / var / lib / sendmail / lib`

sẽ thiết lập $ dflt đến X nếu không sendmail.cf tệp đã được tìm thấy trong các thư mục được liệt kê,
hoặc một cái gì đó như /usr/lib/sendmail.cf trên một số hệ thống. Xem thêm Getfile.U.

ThưTác giả.U
Đơn vị này cần được đưa vào dòng? MAKE: của End.U riêng tư của riêng bạn để tạo
Nó đi vào Thiết lập. Nó cung cấp cho người dùng đăng ký chính mình với tác giả, tùy chọn
được thông báo khi các bản vá mới đến hoặc nhận chúng tự động khi được phát hành.
Bạn cần cài đặt người đưa thư để làm điều này (ít nhất là phiên bản 3.0).

Danh sách thư.U
Đơn vị này cần được đưa vào dòng? MAKE: của End.U riêng tư của riêng bạn để tạo
Nó đi vào Thiết lập. Nó cung cấp cho người dùng đăng ký hoặc hủy đăng ký một danh sách gửi thư
nơi thảo luận liên quan đến gói đang diễn ra. Bạn cần chạy đóng gói
và trả lời các câu hỏi liên quan đến danh sách gửi thư để thiết lập các biến thích hợp trong
.Bưu kiện trước khi đơn vị này có thể đi vào hoạt động.

Myinit.U
Sao chép đơn vị này vào chế độ riêng tư của bạn U thư mục để thêm các giá trị mặc định của riêng bạn vào một số
các biến nội bộ. Đơn vị này được tải vào Thiết lập sau tất cả các mặc định
khởi tạo đã được thực hiện.

Myread.U
Đơn vị này sản xuất đọc của tôi shell script phải có nguồn để thực hiện một
đọc. Nó cho phép thoát shell, gán mặc định và đánh giá tham số, như
được ghi lại trong đơn vị Hướng dẫn.U. Nó cũng cho phép cài đặt động của -d Tùy chọn,
sẽ được sử dụng cho phần còn lại của quá trình thực thi tập lệnh.

Để sử dụng đơn vị này, $ rp phải giữ câu hỏi và $ dflt nên chứa mặc định
bài giải. Câu hỏi sẽ được in bởi chính script và trả về kết quả
trong $ ans biến.

Đây là một cách sử dụng điển hình:

dflt = 'y'
rp = 'Câu hỏi?'
. ./myread
value = "$ ans"

Xem bản thân đơn vị để biết thêm thông tin.

Oldconfig.U
Đơn vị này phải là một phần phụ thuộc của bạn? MAKE: dòng khi một số đơn vị của bạn cố gắng
để sử dụng lại giá trị biểu tượng cũ. Đơn vị này có trách nhiệm lấy các câu trả lời cũ
từ config.sh hoặc cung cấp các gợi ý hữu ích khi chạy trên một nền tảng nhất định cho
lần đầu tiên. Xem Thiết lập Gợi ý để biết thêm thông tin về gợi ý.

Tiền tố.U
Mục đích của đơn vị này là phát hiện những thay đổi trong thư mục tiền tố cài đặt để
tính toán lại các giá trị mặc định phù hợp tự động từ các câu trả lời trước đó. Nó dựa vào
giá trị của $ oldprefix biến giữ thư mục tiền tố trước đó khi nó
đã thay đổi, và trống rỗng. Ví dụ: nếu tiền tố được thay đổi từ /opt đến
/ usr / local, thì thư mục cài đặt nhị phân trước đó sẽ được thay đổi từ
/ opt / bin đến / usr / local / binhoặc sẽ không thay đổi nếu nó là, / thùng rác.

Bạn cần gọi định trước khi phát hành một đánh giá on $ prefixit, Chẳng hạn như:

đặt dflt var [dir]
eval $ prefixit

cái nào sẽ thiết lập $ dflt đến $ var or tiền tố $ / dir tùy thuộc vào việc tiền tố còn lại hay không
giống nhau hay không. Nếu như dir là chuỗi không ai, một giá trị khoảng trắng duy nhất trong $ dflt được giữ như-
là, ngay cả khi tiền tố thay đổi. Nếu như dir được bỏ qua, sau đó $ dflt được đặt thành trống
chuỗi nếu tiền tố thay đổi, thành $ var nếu không thì.

Tiền tố.U
Mục đích của đơn vị thit tương tự như của Prefixit.U, tức là nó giúp sửa lỗi
chuỗi mặc định để điều chỉnh các thay đổi tiền tố. Tuy nhiên, biến shell tiền tố $,
khi được đánh giá, sẽ chỉ khôi phục ~ mở rộng tên, nên tiền tố sử dụng lối thoát như vậy
cơ chế. Sử dụng nó như:

đặt dflt
eval $ prefixup

trước khi nhắc qua có được file ví dụ. Nếu tiền tố không sử dụng ~ name
mở rộng, sau đó ở trên sẽ là không chọn đối với y biến, một cách tự nhiên.

Typedef.U
Đơn vị này sản xuất $ typedef biến shell, được sử dụng nội bộ bởi Thiết lập để kiểm tra
liệu một typedef có tồn tại hay không. Một cách sử dụng điển hình là:

đặt typedef val_t mặc định [bao gồm]
eval $ typedef

Điều này sẽ đặt biến val_t với giá trị của mặc định nếu không tìm thấy typedef
trong số các tệp được liệt kê, bao gồm các tệp, hoặc đánh máy Nếu được tìm thấy. Nếu không có tệp bao gồm
được chỉ định, đơn vị tìm trong chỉ một. Nếu bạn xác định một số bao gồm, chỉ
những cái đó được nhìn vào.

Unix.U
Mục đích của đơn vị này là xác định một số UNIX-isms phổ biến nhất thông qua các biến
có thể được thay đổi từ dòng lệnh hoặc thông qua các tệp gợi ý thích hợp. Đặc biệt,
$ _exe, $ _o$ _a được thiết lập. Tất cả các đơn vị nên tham khảo $ _o và không .o trực tiếp.
Các '.' là một phần của các biến này.

Setvar.U
Đơn vị này tạo ra biến, được sử dụng nội bộ bởi Thiết lập để thiết lập một
định nghĩa/ undef giá trị cho một biểu tượng nhất định, phát ra cảnh báo khi nó đột ngột thay đổi
từ một giá trị trước đó. Ví dụ:

val = "$ xác định"
đặt d_variable
eval $ setvar

Nếu trước đó $ d_variable giá trị không rỗng và $ val là khác nhau, một "whoa"
cảnh báo được đưa ra.

ồ.U
Đơn vị này sản xuất whoa script, phát ra cảnh báo khi giá trị trong biến
tên mà là $ var không giống với giá trị cũ trước đây của nó được giữ ở $ là. Trên
trở về, $ td$ tu giữ giá trị thích hợp để định nghĩa or không xác định biến. Nhìn thấy
ví dụ trong Inlibc.U.

Được xây dựng trong Tiền xử lý
Mỗi đơn vị được bao gồm trong Thiết lập được chạy thông qua một bộ tiền xử lý tích hợp sẵn. Trước
các câu lệnh của bộ xử lý được giới thiệu bởi ký tự '@' ('#' là chú thích của shell
tính cách). Nó hoạt động đơn thuần như bộ xử lý tiền C nhưng cho phép shell và perl
trốn thoát. Dưới đây là các chức năng có sẵn:

@nếu như biểu hiện
If biểu hiện là đúng, hãy tiếp tục tải mã cho đến @end, @elsif hoặc @else.

@elsif biểu hiện
Lựa chọn thay thế. Nếu như biểu hiện là đúng, tiếp tục tải mã cho đến khi @end,
@elsif hoặc @else khác.

@else Mã mặc định sẽ được tải nếu @if biểu hiện là sai và không có
@elsif tùy chọn phù hợp. Tải cho đến @end.

@end Đóng câu lệnh tải có điều kiện được mở bởi @if.

@định nghĩa biểu tượng
Cho bộ xử lý trước biết rằng biểu tượng được xác định từ bây giờ.

Điều kiện biểu hiện có thể bao gồm tên ký hiệu (giá trị là true nếu muốn ký hiệu hoặc
được xác định qua @định nghĩa hoặc shell / perl thoát ra. Các nguyên tử đó có thể được kết hợp bằng cách sử dụng
toán tử boolean truyền thống '!' đối với phủ định, '&&' đối với logic và, và '||' cho hợp lý
hoặc.

Văn bản nằm trong dấu ngoặc đơn là một bài kiểm tra trình bao, trong khi văn bản giữa các dấu ngoặc kép là
một bài kiểm tra perl. Cụ thể là các biểu thức:

{ shell văn bản }
{{ perl văn bản }}

được dịch thành:

if shell văn bản > / dev / null 2> & 1; sau đó thoát ra 0; khác thoát ra 1; fi
nếuperl văn bản) {thoát 0;} else {thoát 1;}

và trạng thái thoát được sử dụng theo cách tiêu chuẩn để nhận giá trị boolean, tức là 0 là true và
mọi thứ khác đều sai. Lưu ý rằng chỉ những điều kiện đơn giản mới có thể được biểu thị bằng perl, cho đến khi
một số mã phức tạp có thể được tải trong siêu cấu hình và thực hiện.

Bộ xử lý trước tích hợp có thể được sử dụng để tinh chỉnh một số thiết bị (xem d_gethname.U cho một
ví dụ phức tạp) tùy thuộc vào các ký hiệu thực sự được sử dụng bởi chương trình hoặc các tệp
có mặt trong bản phân phối. Ví dụ, Oldconfig.U sử dụng một bài kiểm tra như:

@if {kiểm tra -d ../hint}

Thiết lập sẽ chỉ chứa mã phụ thuộc gợi ý nếu có gợi ý thư mục trong
thư mục cấp cao nhất của gói. Lưu ý rằng các bài kiểm tra được chạy từ bên trong '.MT' danh mục,
do đó cần có '../' trong thử nghiệm.

Bộ xử lý trước cũng có thể được sử dụng để tránh đặt mã vô ích khi không có ký hiệu
được xác định. Các đơn vị xác định nhiều hơn một ký hiệu có thể được bảo vệ theo cách đó (vì đơn vị là
được tải tổng thể) bằng cách thu thập mã phụ thuộc vào ký hiệu trong một cặp @ if / @ end. Vì
ví dụ:

@ nếu I_TIME || I_SYS_TIME || I_SYS_TIME_KERNEL
need_time_h = 'true'
@khác
need_time_h = 'false'
@kết thúc

sẽ kiểm tra xem mã nguồn có sử dụng bất kỳ một trong ba biểu tượng kiểm soát
các thời gian or sys / time.h bao gồm và xác định ký hiệu vỏ cho phù hợp. Điều đó cho
Thiết lập phản hồi về những gì các nguồn cần và tránh nhược điểm của việc đã sửa
đơn vị đông lạnh.

Thông qua các dòng '? W:', bạn có thể nhận được các kết hợp xen kẽ. Ví dụ, i_time.U đơn vị
cần biết liệu các nguồn C có sử dụng cấu trúc Múi giờ kiểu. Vì vậy,
dòng:

? W :: múi giờ

được sử dụng cho tác dụng phụ của nó là xác định ký hiệu Múi giờ cho bộ xử lý trước. Các
sau đó mã đơn vị có thể nói:

@if múi giờ
cho s_timezone trong '-DS_TIMEZONE' ''; làm
@khác
s_timezone = ''
@kết thúc

... mã sử dụng s_timezone ...

@if múi giờ
thực hiện
@kết thúc

và có thêm một vòng lặp để thử hai giá trị liên tiếp cho s_múi giờ biến, nhưng chỉ
Nếu cần thiết.

Lỗi thời Biểu tượng
Các biểu tượng lỗi thời được giữ nguyên để dễ dàng chuyển đổi với các biểu tượng cũ hơn siêu cấu hình các đơn vị. Trừ phi
các -o chuyển đổi được chuyển cho siêu cấu hình chúng sẽ bị bỏ qua. Tuy nhiên, một Lỗi thời hồ sơ sẽ
được tạo, cho bạn biết tệp nào đang sử dụng các ký hiệu lỗi thời đó và những gì
là những biểu tượng mới sẽ được sử dụng.

Thời gian tồn tại của các ký hiệu lỗi thời là một lần sửa đổi đầy đủ, tức là chúng sẽ bị xóa khi
bản sửa đổi cơ sở tiếp theo được phát hành (tất nhiên là không tính các bản nâng cấp). Vì vậy nó là
khôn ngoan để dịch các nguồn của bạn và bắt đầu sử dụng các ký hiệu mới càng sớm càng tốt.

Thiết lập Gợi ý
Có thể xảy ra trường hợp logic cấu hình bên trong đưa ra các lựa chọn sai. Vì
ví dụ, trên một số nền tảng, vfork () cuộc gọi hệ thống hiện có nhưng bị hỏng, vì vậy nó sẽ
không được sử dụng. Không thể đưa kiến ​​thức đó vào các đơn vị, bởi vì
đó có thể là sự cố tạm thời mà cuối cùng nhà cung cấp sẽ khắc phục hoặc điều gì đó
đã được giới thiệu bởi một bản nâng cấp hệ điều hành mới.

Dù sao đi nữa, đối với tất cả những vấn đề nhỏ nhỏ quá đặc thù của hệ thống, siêu cấu hình
cung cấp hỗ trợ tệp gợi ý. Để sử dụng nó, bạn cần tạo gợi ý thư mục trong
thư mục cấp cao nhất của gói và có nó khi bạn chạy siêu cấu hình. Điều đó sẽ tải
phần liên quan đến gợi ý từ Oldconfig.U.

Từ đó trở đi, bạn có thể đặt trước một số biến shell Thiết lập sử dụng trong một hệ điều hành cụ thể
tệp .sh. Có mã trong Oldconfig.U cố gắng đoán những tệp gợi ý nào là cần thiết bởi
tính toán một tên tiêu chuẩn dựa trên tên hệ điều hành hệ thống, tên hạt nhân, bản phát hành
số, v.v ... Vì thông tin này có thể thay đổi nhanh chóng, tôi không ghi lại thông tin đó
ở đây. Bạn phải thiết kế ngược mã từ Oldconfig.U.

Khi bạn phát hành gói lần đầu tiên, thư mục tệp gợi ý của bạn sẽ trống. Nếu
người dùng gói của bạn phàn nàn rằng họ gặp vấn đề với Thiết lập mặc định trên một
hệ thống cụ thể, bạn phải xem liệu đây là sự cố của nền tảng cụ thể hay
một cái chung. Trong trường hợp trước đây, đã đến lúc giới thiệu một tệp gợi ý mới, trong khi
sau đó, đơn vị tương ứng nên được sửa đổi.

Ví dụ, các hệ thống SGI được biết là đã bị hỏng vfork () cuộc gọi hệ thống, kể từ đây
viết. Và tên tệp gợi ý tương ứng là sgi.sh. Vì vậy, tất cả những gì bạn cần làm là tạo
a gợi ý / sgi.sh tệp mà bạn viết:

d_vfork = "$ xác định"

cái nào sẽ luôn sửa lại cái nĩa on ngã ba (xem d_vfork.U). Khi chạy trên hệ thống SGI cho
lần đầu tiên, Thiết lập sẽ phát hiện ra rằng có một gợi ý / sgi.sh và chúng tôi đang ở trên
một máy IRIX (tên hạt nhân thường là / irix), do đó nó sẽ đề xuất sgi như là một
gợi ý có thể. Nếu người dùng chấp nhận nó, và vì $ d_vfork giá trị được sửa đổi thông qua
$ setvar gọi, một Ái chà! sẽ được phát ra để cảnh báo rằng chúng tôi sắp ghi đè giá trị
tính toán bởi Thiết lập.

Lưu ý rằng bạn không cần phải cung cấp tất cả các những gợi ý được biết đến bởi Oldconfig.U. Nếu một tệp gợi ý là
thiếu, nó sẽ không được đề xuất như một sự lựa chọn có thể. Các bài kiểm tra heuristic chạy để tính toán
các ứng cử viên gợi ý có thể không ổn định. Nếu bạn có các giá trị mới hoặc các thử nghiệm khác, vui lòng
gửi chúng cho tôi...

Ghi đè Lựa chọn
Nếu bạn tạo một config.over tệp trong thư mục cấp cao nhất, Thiết lập sẽ hỏi bạn nếu bạn
muốn tải nó để ghi đè các giá trị mặc định. Điều này được thực hiện trước khi tạo
config.sh để bạn có cơ hội vá các giá trị được lưu trữ trong đó.

Điều này khác với cách tiếp cận gợi ý ở chỗ nó là một tệp cục bộ, mà người dùng là
tự do tạo để sử dụng cho riêng mình. Bạn không nên tự mình cung cấp một tệp như vậy mà hãy để
người dùng biết về khả năng này.

Thiết lập Các lựa chọn
Sản phẩm Thiết lập script có thể được gọi với một số tùy chọn được chỉ định trên dòng lệnh, để
sửa đổi một chút hành vi của nó. Dưới đây là các tùy chọn được phép:

-d Sử dụng giá trị mặc định cho tất cả các câu trả lời.

-e Tiếp tục mà không đặt câu hỏi về quá trình sản xuất config.sh.

-f hồ sơ Sử dụng tệp được chỉ định làm cấu hình mặc định. Nếu công tắc này không được sử dụng,
cấu hình được lấy từ config.sh, khi diễn giải.

-h In thông báo trợ giúp và thoát.

-r Sử dụng lại giá trị ký hiệu C nếu có thể. Điều này sẽ bỏ qua sự tốn kém nm biểu tượng
khai thác. Nếu được sử dụng lần đầu tiên (không có tệp cấu hình trước đó),
Thiết lập sẽ cố gắng biên dịch và liên kết một chương trình nhỏ để biết về
sự hiện diện của một biểu tượng, hoặc sự vắng mặt của nó.

-s Chế độ im lặng. Chỉ các chuỗi được in trên bộ mô tả tệp # 4 sẽ được nhìn thấy trên
màn hình (đó là những thông báo quan trọng). Không thể tắt hoàn toàn
bất kỳ đầu ra nào, nhưng bạn có thể sử dụng 'Thiết lập -các nhân viên > / dev / null 2> & 1'để có một
chạy hàng loạt không có đầu ra và không cần tương tác của người dùng.

-D biểu tượng = giá trị
Xác định trước biểu tượng chịu các quy định giá trị. Nó cũng có thể sử dụng '-D
biểu tượng'sẽ sử dụng giá trị mặc định là' xác định '.

-E Dừng lại ở cuối câu hỏi cấu hình, sau khi tạo
config.sh. Điều này sẽ không thực hiện bất kỳ 'làm cho phụ thuộc'hoặc giải nén tệp .SH.

-K Người dùng hiểu biết. Khi bạn sử dụng tùy chọn này, bạn biết mình đang làm gì và
do đó config.sh tệp sẽ luôn được xử lý như thể nó được dự định
được sử dụng lại, mặc dù nó có thể được tạo ra trên một hệ thống của người ngoài hành tinh. Nó cũng
ngăn chặn việc hủy bỏ khi Thiết lập phát hiện một trình biên dịch C không sử dụng được hoặc một tập hợp sai
của C. cờ. Các phím tắt khác cũng có thể được bật theo tùy chọn này trong
Tương lai. Tùy chọn này được ghi lại trong Thiết lập thông báo sử dụng, để nhắc nhở chúng tôi
về sự tồn tại của nó, nhưng mô tả đã cho hy vọng là đủ khó hiểu.
:-)

-O Cho phép các giá trị được chỉ định qua -D or -U để ghi đè cài đặt từ bất kỳ
tập tin cấu hình. Đây không phải là hành vi mặc định vì việc ghi đè sẽ
không được truyền sang các biến có nguồn gốc từ những biến mà bạn hiện đang thay đổi.
Đương nhiên, không có -O, cài đặt chỉ được thực hiện khi không có tệp cấu hình
được tải, an toàn vì các biến phái sinh chưa được tính toán ...

-S Thực hiện thay thế biến trên tất cả các tệp .SH. Bạn có thể kết hợp nó với
-f chuyển sang tuyên truyền bất kỳ cấu hình nào bạn thích.

-U biểu tượng =
Đặt trước biểu tượng mang một giá trị rỗng. Nó cũng có thể sử dụng '-U biểu tượng'
cái nào sẽ thiết lập biểu tượng thành 'undef'.

-V In số phiên bản của siêu cấu hình đã tạo ra cái này Thiết lập kịch bản
và thoát ra.

Chạy Môi trường
Khi bắt đầu, Thiết lập tạo ra một địa phương UU thư mục và chạy từ đó. Cac thu mục
bị xóa khi Cấu hình kết thúc, nhưng điều này có nghĩa là bạn phải chạy tập lệnh từ nơi
bạn có thể viết, tức là không phải từ hệ thống tệp chỉ đọc.

Bạn có thể chạy Thiết lập mặc dù từ xa, như trong:

../gói/Cấu hình

để định cấu hình các nguồn không có mặt cục bộ. Tất cả các tệp đã tạo sẽ được đưa vào
thư mục mà bạn đang chạy tập lệnh từ đó. Phép thuật này được thực hiện nhờ src.U
đơn vị đang thiết lập $ src$ rsrc các biến để trỏ đến các nguồn gói. Điều đó
đường dẫn đầy đủ hoặc tương đối, tùy thuộc vào việc Thiết lập đã được gọi thông qua một hoặc đầy đủ
đường dẫn tương đối.

Từ bên trong UU thư mục con, bạn có thể sử dụng $ rsrc để truy cập các tệp nguồn (đơn vị
đề cập đến các gợi ý liên kết tệp nguồn sẽ luôn sử dụng cơ chế này và không giả định
tệp có trong thư mục mẹ). Tất cả các tệp Makefiles nên sử dụng biến $ src
như một con trỏ đến các nguồn từ đầu thư mục xây dựng (trong đó Thiết lập chạy),
trực tiếp hoặc thông qua cài đặt VPATH.

Khi chạy Thiết lập từ xa, các tệp .SH được trích xuất trong thư mục xây dựng, không
trong cây nguồn. Tuy nhiên, nó đòi hỏi một số loại làm cho hỗ trợ để có thể biên dịch
những thứ trong thư mục xây dựng trong khi các nguồn nằm ở nơi khác.

Sử dụng ma thuật Định nghĩa lại
Bằng cách sử dụng -M chuyển đổi, một số ánh xạ ma thuật có thể diễn ra trong confmagic.h
tập tin. Tệp đó cần được đưa vào sau cấu hình.h, tất nhiên, nhưng sau tất cả
cần thiết khác bao gồm các tệp. Cụ thể:

#include "config.h"
hữu ích. Cảm ơn !
hữu ích. Cảm ơn ! khác bao gồm hữu ích. Cảm ơn !
hữu ích. Cảm ơn !
#include "confmagic.h"

Thông thường, confmagic.h sẽ cố gắng sửa lại bcopy () on memcpy () nếu không bcopy () is
có sẵn tại địa phương hoặc chuyển đổi cái nĩa trong ngã ba khi cần thiết, do đó làm cho nó trở nên vô dụng
bận tâm về HAS_VFORK Biểu tượng.

Phép thuật cấu hình này được ghi lại trong tệp Bảng chú giải thuật ngữ.

đơn vị Templates
Có một tập hợp các mẫu đơn vị trong siêu cấu hình thư mục nguồn, nhằm mục đích
được sử dụng bởi một chương trình (chưa được viết) để nhanh chóng tạo ra các đơn vị mới cho nhiều loại
các tình huống. Không có tài liệu cho dự án chưa hoàn thành này, nhưng tôi nghĩ tôi sẽ đề cập đến nó
trong trang hướng dẫn sử dụng trong trường hợp bạn muốn tự làm và sau đó đóng góp ...

TÁC GIẢ


Larry Wall[email được bảo vệ]> cho phiên bản 2.0.
Harlan Stenn[email được bảo vệ]> cho các phần mở rộng đơn vị quan trọng.
Raphael Manfredi[email được bảo vệ]>.
Nhiều người đóng góp khác cho siêu cấu hình các đơn vị. Xem hồ sơ tín dụng để biết danh sách.

Sử dụng metaconfig trực tuyến bằng các dịch vụ onworks.net


Máy chủ & Máy trạm miễn phí

Tải xuống ứng dụng Windows & Linux

Lệnh Linux

Ad