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

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

makepp_statements - Trực tuyến trên Đám mây

Chạy makepp_statements 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à lệnh makepp_statements có thể 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


makepp_statements - Các câu lệnh khác nhau trong một makefile

MÔ TẢ


A: tự động tải, B: build_cache,
xây dựng_kiểm tra, D: "định nghĩa", E: xuất khẩu, G: toàn cầu, I: nếudef,
mạng xã hội,
ifmakeperl,
nếundef,
nếu không,
nếunsys,
nếu đúng,
iperl,
nếu là,
nếu đúng,
-bao gồm,
bao gồm,
_bao gồm, L: tải_makefile, M: chế tạo,
trang điểm,
makeub, N: "no_implicit_load", P: perl,
"perl_begin",
xây dựng trước, R: đăng ký_command_parser,
đăng ký_input_suffix,
đăng ký_parser,
kho,
thời gian chạy, S: Chữ ký,
"phụ", V: vpath

Một câu lệnh là bất kỳ dòng nào bắt đầu bằng một từ không có ":" trong đó. (Một dấu hai chấm
ngụ ý rằng dòng là một quy tắc.) Ví dụ, đây là các câu lệnh:

bao gồm extra_rules.mk
load_makefile phụ

Makepp có một số câu lệnh nội trang mà đôi khi bạn có thể cần sử dụng.

Lưu ý rằng bất cứ nơi nào bạn nhìn thấy dấu gạch dưới, bạn cũng có thể sử dụng dấu gạch ngang, vì makepp chuyển đổi
dấu gạch ngang để gạch dưới trong tên câu lệnh.

Điều kiện
Điều kiện là các câu lệnh đặc biệt, kiểm soát các dòng của Makeppfile.
thực sự đã nhìn thấy. Dạng đơn giản nhất (trong đó "ifxxx" là viết tắt của bất kỳ điều kiện nào
báo cáo được ghi dưới đây) là:

nếuxxx...
các dòng được nhìn thấy nếu câu lệnh đánh giá là đúng
endif

hoặc:

nếuxxx...
các dòng được nhìn thấy nếu câu lệnh đánh giá là đúng
khác
các dòng được nhìn thấy nếu câu lệnh đánh giá là sai
endif

Ngoài ra còn có khả năng thực hiện các kết hợp phức tạp như thế này:

nếuxxx...
và ifxxx ...
và ifxxx ...
hoặc ifxxx ...
và ifxxx ...
các dòng được nhìn thấy nếu các câu lệnh kết hợp đánh giá là đúng
khác ifxxx ...
hoặc ifxxx ...
và ifxxx ...
các dòng được nhìn thấy nếu kết hợp đầu tiên đánh giá là sai
và các câu kết hợp này đánh giá là đúng
khác
các dòng được xem nếu các câu trên đánh giá là sai
endif

Như được đề xuất bởi thụt lề, "và" có quyền ưu tiên cao hơn "hoặc là". Nói cách khác
an "hoặc là" bầu chọn giữa hai nhóm "và"`s. Có thể có bất kỳ số lượng "và ifxxx" `s,
"hoặc ifxxx" `s và" else ifxxx "` s.

Các câu lệnh điều kiện "ifxxx" là duy nhất ở chỗ chúng có thể xuất hiện ở giữa quy tắc
như trong ví dụ trên, mà không làm gián đoạn quy tắc.

ifeq chuỗi1, chuỗi2
ifneq chuỗi1, chuỗi2
ifeq ($ (STR1), $ (STR2))
dòng makefile nếu đúng
khác
dòng makefile nếu sai
endif

Nếu hai chuỗi khớp chính xác (ngoại trừ khoảng trắng ở đầu hoặc cuối), thì
tập hợp các dòng đầu tiên được sử dụng; nếu không thì cái thứ hai được sử dụng. Mệnh đề khác là
không bắt buộc.

Có hai cú pháp khác được chấp nhận cho câu lệnh "ifeq" và "ifneq":

chuỗi ifeq1, chuỗi2
chuỗi ifeq1 chuỗi2

tương đương nhau. Tất nhiên bạn có thể trích dẫn các chuỗi khi cần thiết.

"ifeq" và những người bạn của nó "ifneq", "ifdef", "ifndef", "ifperl", "ifmakeperl", "ifsys" và
"iftrue" chủ yếu hữu ích khi bạn phải xây dựng một chương trình theo một số
điều kiện. Ví dụ,

BUILD_TYPE: = debug # "debug" hoặc "production"

ifeq ($ (BUILD_TYPE), gỡ lỗi)
CFLAGS: = -g
khác
CFLAGS: = -O2
endif

chương trình: * .o
$ (CC) $ (CFLAGS) $ (đầu vào) -o $ (đầu ra) $ (LIBS)
ifeq ($ (BUILD_TYPE), sản xuất)
dải $ (đầu ra)
endif

% .o:% .c
$ (CC) $ (CFLAGS) -c $ (đầu vào) -o $ (đầu ra)

Nếu đây là bản dựng sản xuất, tất cả các tệp được biên dịch bằng tùy chọn "-O2" thay vì
tùy chọn "-g". Hơn nữa, "dải" chương trình được chạy trên tệp nhị phân kết quả (trong
trường hợp bạn tình cờ liên kết với một số thư viện đã được biên dịch ở chế độ gỡ lỗi).

Đôi khi, sử dụng hàm "$ (if)" hoặc hàm "$ (perl)" "dễ dàng hơn
thay vì câu lệnh "ifeq".

Nếu bạn chỉ muốn xem một biểu tượng có trống hay không, bạn chỉ cần cung cấp
đối số duy nhất, như thế này:

ifneq $ (EXE_SUFFIX)
# phải làm gì nếu $ (EXE_SUFFIX) không trống
endif

ifdef BIẾN ĐỔI ...
ifndef BIẾN ĐỔI ...
Các câu lệnh này hoạt động tương tự với các câu lệnh "ifeq" và "ifneq", ngoại trừ
họ kiểm tra xem có bất kỳ biến nào trong số các biến được xác định hay không (nghĩa là không có biến nào là
xác định). Một biến được xác định nếu:

· Nó đã được cấp một giá trị với một phép gán trước đó trong makefile. Nhìn thấy
makepp_variables để biết chi tiết.

· Nó đã được cấp một giá trị như một biến Perl trong một khối "perl_begin".

· Biến có trong môi trường.

· Biến có trên dòng lệnh, ví dụ, để gọi makefile của bạn, bạn
đã đánh máy

makepp CFLAGS = -O2

Ví dụ,

ifndef CFLAGS
CFLAGS: = -g
endif

Trong trường hợp này, "CFLAGS" chỉ được đặt thành "-g" nếu nó chưa được xác định. Lưu ý rằng
câu lệnh này có thể dễ dàng được viết bằng cách sử dụng phép gán "? =", như
điều này:

CFLAGS? = -G

ifperl mã perl
ifmakeperl mã perl
Các câu lệnh này hoạt động tương tự với các câu lệnh "ifeq" và "ifneq", ngoại trừ
các bài kiểm tra ở Perl. Biến thể đầu tiên là mã Perl thuần túy, trong khi biến thể thứ hai
đầu tiên chuyển câu lệnh thông qua phần mở rộng biến Make-style.

PHIÊN BẢN: = 3.0
# VERSION cũng tự động là một biến Perl:
ifperl $ VERSION <= 2
CPPFLAGS: = -DNEW
endif
# dấu ngoặc kép cần thiết cho CFLAGS, vì Perl chỉ thấy giá trị:
ifmakeperl my $$ x = '$ (CFLAGS)'; $$ x = ~ / -g /
CFLAGS: = -g -O2
endif

ifsys ký tự đại diện ...
ifnsys ký tự đại diện ...
Kiểm tra xem makepp của hệ thống hiện tại có đang chạy khớp với bất kỳ ký tự đại diện nào hay không
bất kỳ (tức là không có).

ifsys tôi [3-6] 86
và ifsys Linux SunOS
... # Một nền tảng Intel với Linux hoặc Solaris
ifnsys sparc power khác *
... # Nor Sparc hoặc PowerPC
endif

Có tối đa sáu dây khác nhau mà bạn có thể kết hợp với nhau. Các chuỗi thực tế là
không được tiêu chuẩn hóa. Ba trong số chúng phản ánh cá thể Perl được xây dựng để làm gì (không phải
nhất thiết giống như nơi nó đang chạy) và những cái khác đến từ hệ thống và
tất cả đều khác nhau về hình thức. Bạn có thể tìm thấy tất cả những gì nền tảng hiện tại phù hợp với
gõ lệnh sau vào Shell:

perl -MConfig -e'print "$ ^ O @Config {qw (Archname myarchname)}" '; uname -mps

nếu đúng biểu hiện
nếu đúng biểu hiện
Kiểm tra xem biểu thức có đánh giá một giá trị nào đó khác không hoặc chuỗi trống hay không.

Nền tảng khác Đa dòng Báo cáo
Các điều kiện có thể kiểm soát toàn bộ một câu lệnh nhiều dòng, nhưng chúng không thể nằm bên trong một
tuyên bố.

định nghĩa
{export | global | override} * xác định
xác định VARIABLE [toán tử gán]
dòng giá trị biến 1
dòng giá trị biến 2
cuối cùng

Xác định giá trị của $ (VARIABLE) là tất cả các dòng giữa câu lệnh "define" và
câu lệnh "endef". Xem các biến đa dòng. Các từ khóa "xuất khẩu" và "toàn cầu" có thể
không được đưa ra cùng một lúc.

perl_bắt đầu
Điều này cũng giống như "perl", nhưng sử dụng cú pháp câu lệnh kiểu tạo kiểu GNU. Tuyên bố này
giới thiệu một khối mã được diễn giải nguyên văn bằng perl. Nó có thể hữu ích
để xác định các chức năng, nhưng bạn có thể thực hiện điều này ngắn gọn hơn với câu lệnh "sub".
Một khối mã Perl trong makefile của bạn có thể hữu ích để thực hiện các hành động dễ dàng hơn
trong Perl hơn là với các hàm và quy tắc makepp.

Phần còn lại của dòng theo sau câu lệnh "perl_begin" bị bỏ qua. Tất cả văn bản
cho đến khi một dòng bắt đầu ở lề trái với "perl_end" được gửi nguyên văn đến
thông dịch viên perl. Không được có khoảng trắng trước "perl_end".

Một ví dụ mà tôi sử dụng điều này là tạo các thư mục có thể không nhất thiết
hiện hữu. Việc đặt tất cả các tệp .o trong một thư mục con (ví dụ:
thư mục có tên i386, hoặc là sparc, hoặc cái gì đó tùy thuộc vào loại máy).
Nhưng nếu thư mục chưa tồn tại thì sao? Bạn có thể tạo từng tệp .o tùy thuộc vào
thư mục con và đưa một quy tắc vào để xây dựng thư mục con. Nhưng nó dễ dàng hơn rất nhiều chỉ
để làm điều này:

OBJDIR: = $ (ARCH) # Nơi chúng tôi đặt tệp .o.
perl_bắt đầu
-d $ OBJDIR hoặc mkdir $ OBJDIR; # Đảm bảo rằng thư mục tồn tại.
perl_end

Bằng cách này, mỗi khi makefile được chạy, thư mục con sẽ được tạo nếu nó
không tồn tại.

Một số hoạt động được thể hiện dưới dạng biểu thức chính quy tốt hơn so với makepp
các chức năng văn bản. Ví dụ,

perl_bắt đầu
if ($ ARCH = ~ / ^ i [56] 86 /) {# Bạn có thể thực hiện việc này với: ifsys i [56] 86
$ CFLAGS = '-O6 -malign-double'; # Trên máy intel> 486, ở đó
# là một hình phạt tốc độ đáng kể
# cho các bài đôi không phải là ô chữ tứ
# căn chỉnh.
} Else {
$ CFLAGS = '-O6';
}
perl_end

% .o:% .c
$ (CC) $ (CFLAGS) -c $ (đầu vào) -o $ (đầu ra)

Bất kỳ biến make nào cũng có thể được truy cập trực tiếp dưới dạng một đại lượng vô hướng Perl. Trong trường hợp này, chúng tôi đã đặt
giá trị của "CFLAGS" khác nhau dựa trên đối sánh biểu thức chính quy trên
cờ kiến ​​trúc.

Ví dụ cuối cùng, một số thông tin dễ dàng truy cập trực tiếp từ Perl
hơn từ makepp. Ví dụ: bạn có thể truy cập tất cả thông tin cấu hình
perl biết về hệ thống của bạn, bao gồm cách xây dựng thư viện được chia sẻ, v.v.
(Nhập "perldoc Config" nếu bạn muốn xem thông tin cấu hình Perl có
có sẵn.)

perl_bắt đầu

sử dụng Config;

$ ARCH = $ Cấu hình {'Archname'}; # Sử dụng kiến ​​thức của perl về kiến ​​trúc.
$ CC = $ Cấu hình {'cc'}; # Sử dụng trình biên dịch C giống như Perl đã làm.
$ SHARED_OBJ_CFLAGS = $ Cấu hình {'cccdlflags'};
# Cờ cần thiết để biên dịch các đối tượng sẽ
# đi vào thư viện được chia sẻ.
$ SHARED_OBJ_LDFLAGS = $ Cấu hình {'ccdlflags'}. "". $ Cấu hình {'lddlflags'};
# Trình liên kết gắn cờ để tạo thư viện được chia sẻ.
$ SHARED_CC_LINK = $ Cấu hình {'ld'}; # Lệnh tạo thư viện dùng chung.

$ SHARED_EXTENSION = $ Cấu hình {'dlext'}; # Mở rộng thư viện dùng chung.
perl_end

% .o:% .c
$ (CC) $ (CFLAGS) $ (SHARED_OBJ_CFLAGS) -c $ (đầu vào) -o $ (đầu ra)

libmylib. $ (DLEXT): * .o
$ (SHARED_CC_LINK) $ (đầu vào) -o $ (đầu ra) $ (SHARED_OBJ_LDFLAGS)

Lưu ý cách chúng tôi xác định một loạt các biến trong khối Perl và sau đó chúng tôi sử dụng chúng
sau đó trong phần còn lại của makefile. Bạn có thể sử dụng toàn bộ sức mạnh của perl
trình thông dịch để thiết lập các biến của bạn theo những cách phức tạp tùy ý. Bạn có thể chạy shell
lệnh từ mã Perl của bạn, truy cập cơ sở dữ liệu hoặc bất cứ điều gì bạn muốn.

perl mã perl
người tạo ra mã perl
Điều này giống với "perl_begin", nhưng sử dụng dấu ngoặc nhọn kiểu Perl. Biến thể đầu tiên là
mã Perl đơn giản, trong khi biến thể thứ hai lần đầu tiên chuyển câu lệnh qua Make-
mở rộng biến kiểu. Lưu ý rằng khó khăn trong việc phân tích các dấu ngoặc nhọn của Perl có chì
theo phương pháp heuristic đơn giản sau:

· Nếu một dấu ngoặc kép được tìm thấy trên cùng một dòng hoặc dòng tiếp theo, một dấu đóng kép
dấu ngoặc nhọn sẽ kết thúc khối. Nó phải ở đầu dòng, nhưng có thể
trước đó là khoảng trắng.

· Khác, nếu dấu ngoặc nhọn ở cuối dòng "perl" thì đây là dấu
lót.

· Nếu không, dấu ngoặc nhọn đóng phải ở đầu dòng sau,
tức là không có khoảng trắng ở đầu.

Để biết một cách hiệu quả để gọi các tập lệnh Perl, hãy xem "chạy". Không giống như hàm "$ (perl)",
giá trị trả về của khối này bị bỏ qua.

perl {print "đã vượt qua điểm này trong makefile \ n"}

perl
{
print "và cả cái này nữa \ n";
}

ifdef ỒN ào
Perl {{
print "cũng như cái này \ n"
}}
endif

Bạn có thể sử dụng trình gỡ lỗi Perl cho mã nhúng của mình, bằng cách chạy chính makepp trong
trình gỡ lỗi, ở đâu ... là các đối số, nếu có, bạn thường truyền:

perl -d -S mpp ...

Thật khó để đặt các điểm ngắt trong mã Perl chưa được tải. Bạn có thể làm việc
xung quanh vấn đề này bằng cách đặt dòng này vào Perl được nhúng của bạn, ngay trước nơi bạn muốn
để phá vỡ:

$ DB :: đơn = 1;

Sau đó, bạn có thể gõ "c" vào lời nhắc của trình gỡ lỗi, để tiếp tục cho đến thời điểm đó.

phụ
makeub
Câu lệnh này cung cấp một cách để định nghĩa một chương trình con Perl bên trong makefile của bạn. Các
biến thể đầu tiên là mã Perl thuần túy, trong khi biến thể thứ hai chuyển câu lệnh đầu tiên
thông qua mở rộng biến Make-style. Cú pháp giống với cú pháp của Perl
câu lệnh phụ, ngoại trừ rằng các nguyên mẫu là vô nghĩa.

Đối với ba khả năng đặt mắc cài của cơ thể, hãy xem giải thích tại
câu lệnh "perl".

Một chương trình con Perl được gọi bất cứ khi nào một câu lệnh được nhìn thấy hoặc khi một biểu thức như
"$ (tên từ)" được nhìn thấy. Ví dụ: giả sử vì lý do nào đó bạn cần tải
nội dung của một tệp vào một biến make. (Bạn có thể làm điều này bằng cách nói
"$ (shell cat filename)" nhưng bạn có thể làm điều đó mà không cần gọi shell.)
Điều này có thể được thực hiện bằng cách đặt các thông tin sau vào makefile của bạn:

phụ f_file_contents {
của tôi ($ file) = @_; # Đặt tên cho đối số.
mở tệp $ fh, $ của tôi hoặc chết "$ tệp: $! \ n";
địa phương $ / = undef; # Slurp tệp trong một lần đọc.
<$ fh>;
}

ifdef MỚISUB
makeub f_VAR2
{{
$ (VAR) * 2;
}}
endif

makeub f_VAR1 {$ (VAR) + 1}

Bây giờ, với hàm này được định nghĩa, bạn có thể viết

X = $ (tên tệp tin_contents) # tương đương với nội trang $ (& tên tệp mèo)

và biến "$ (X)" sẽ tìm nạp nội dung của tệp đã cho mỗi khi
được mở rộng. Sử dụng ": =" để thực hiện việc này chính xác một lần hoặc "; =" để thực hiện việc này nhiều nhất một lần.

Xem makepp_exionary để biết thêm chi tiết và ví dụ.

Đơn giản Báo cáo
tự động tải tên tập tin ...
Chỉ định một hoặc nhiều tệp trang để tải nếu cố gắng tìm quy tắc cho tệp trong
thư mục này không thành công. Điều này hữu ích khi makefile có các quy tắc
định nghĩa phụ thuộc (có thể gián tiếp) vào một tệp trong thư mục khác phụ thuộc
(có thể gián tiếp) trên các tệp khác trong thư mục này (được xây dựng bởi các quy tắc không
phụ thuộc vào tệp trong thư mục khác).

Ví dụ, của bạn Makeppfile có thể trông như thế này:

rule-to-build-files-that-otherdir / x-depend-on

more_rules.makeppfile: otherdir / x
hành động để xây dựng thêm_rules.makeppfile

tự động tải more_rules.makeppfile

Lưu ý rằng chúng tôi không thể thay thế "autoload" bằng "bao gồm" ở đây một cách đáng tin cậy, bởi vì nếu
một cái gì đó khác với quy tắc cho more_rules.makeppfile cố gắng xây dựng otherdir / x
đầu tiên và sau đó more_rules.makeppfile có thể sẽ thất bại bởi vì otherdir / x sẽ không tồn tại
chưa, bởi vì đã có một nỗ lực để xây dựng nó khi Makeppfile is
được nạp ngầm thay mặt cho nó.

CẢNH BÁO: Hãy hết sức cẩn thận khi thực hiện những việc trong một tệp makefile được tải tự động làm thay đổi
hành vi của các quy tắc trong (các) tệp makefile khác của thư mục, vì điều này sẽ gây ra
hành vi phụ thuộc vào việc một số mục tiêu được xây dựng trước đó có khiến các tệp trang điểm
được tự động tải.

build_cache / path / to / build / cache
[toàn cầu] build_cache / path / to / build / cache
Chỉ định một đường dẫn đến một bộ đệm ẩn bản dựng. Xem makepp_build_cache để biết thêm chi tiết. Tòa nhà
bộ nhớ cache phải đã tồn tại; xem "Cách quản lý bộ đệm bản dựng" trong makepp_build_cache cho
làm thế nào để làm cho nó ở nơi đầu tiên. Câu lệnh "build_cache" trong makefile ghi đè
tùy chọn dòng lệnh "--build-cache" cho các quy tắc trong makefile, nhưng nó có thể
bị công cụ sửa đổi quy tắc ": build_cache" ghi đè trên cơ sở từng quy tắc.

Từ khóa "global" có thể đứng trước câu lệnh này với tác dụng tương tự như lệnh
tùy chọn dòng, tức là bộ đệm xây dựng áp dụng trong mọi makefile. Điều này tốt nhất nên được
đưa ra trong một RootMakeppfile để chắc chắn rằng nó được nhìn thấy đủ sớm.

Chỉ định "không có" thay vì đường dẫn đến một thư mục nếu bạn muốn tắt bộ đệm ẩn bản dựng
cho tất cả các quy tắc trong makefile này.

build_check phương thức build_check_
[toàn cầu] build_check phương thức build_check_
Chỉ định phương pháp kiểm tra bản dựng mặc định cho tất cả các quy tắc trong makefile này. Nhìn thấy
makepp_build_check để biết chi tiết. Câu lệnh "build_check" ghi đè
Tùy chọn dòng lệnh "--build-check-method" cho tất cả các quy tắc trong makefile, nhưng có thể
bị công cụ sửa đổi ": build_check" ghi đè trên cơ sở từng quy tắc.

Từ khóa "global" có thể đứng trước câu lệnh này với tác dụng tương tự như lệnh
tùy chọn dòng, tức là phương pháp kiểm tra bản dựng áp dụng trong mọi makefile không
chỉ định riêng của nó. Điều này tốt nhất nên được đưa ra trong một RootMakeppfile chắc chắn nó là
nhìn thấy đủ sớm.

Chỉ định "build_check default" thay vì tên nếu bạn muốn trở về mặc định.
Với từ khóa "global", điều này có nghĩa là phương thức "precision_match", nếu không điều này sẽ hoàn nguyên
makefile hiện tại không có phương thức cụ thể của riêng nó.

xuất khẩu VAR ...
xuất khẩu chuyển nhượng
xuất PATH: = $ (PWD): $ (PATH)

Đánh dấu các biến đã cho để xuất sang các quy trình con. Xem các biến cài đặt.

toàn cầu VAR ...
toàn cầu chuyển nhượng
global MYPROJECT.INFO = thông tin được xem trong tất cả các trang điểm

Đánh dấu các biến đã cho là toàn cục cho tất cả các tệp tạo. Xem các biến cài đặt.

bao gồm trang điểm
Thao tác này sẽ chèn nội dung của một makefile khác vào makefile hiện tại. Nó có thể
hữu ích nếu bạn có các tệp soạn sẵn với một số quy tắc hoặc biến và mỗi
thư mục chỉ cần thực hiện một vài sửa đổi. Câu lệnh "include" cũng được sử dụng
thường được sử dụng trong truyền thống, kết hợp với tệp bao gồm tự động
máy quét, nhưng điều này không còn cần thiết với makepp.

"include" trước tiên sẽ xem xét thư mục hiện tại, sau đó là thư mục gốc của thư mục hiện tại
thư mục, sau đó là thư mục mẹ của nó, v.v. Nó ngừng xem xét các thư mục khi nó đến
gốc của hệ thống tệp hoặc khi ID thiết bị của hệ thống tệp thay đổi. (Điều này có nghĩa rằng
nó sẽ không tìm thấy các tệp nằm trong các giá đỡ NFS khác. Điều này là để ngăn chặn các vấn đề với
hệ thống tệp mạng hoặc bộ đếm tự động và máy chủ đã chết.) Nếu không tìm thấy tệp
tên đã cho vào thời điểm ngừng tìm kiếm, sau đó tên đó sẽ xuất hiện trong dữ liệu makepp
danh mục (/ usr / local / share / makepp nếu bạn cài đặt makepp trong / usr / local) cho một trong số
bao gồm các tệp đi kèm với makepp.

Nếu bạn muốn bao gồm một tệp mẫu trong mọi tệp trang trong một thư mục toàn bộ
phân cấp, bạn có thể đặt mẫu makefile của mình ở thư mục trên cùng. Trang điểm
không cần phải biết chính xác vị trí của họ trong hệ thống phân cấp; mỗi makefile có thể chứa
một dòng như thế này:

bao gồm standard_definitions.mk

thay vì một cái gì đó phức tạp hơn, như thế này:

bao gồm ../../../standard_definitions.mk # Đây có phải là số đúng của ..?

Bạn có thể chỉ định bao nhiêu tệp tùy thích và các biến được phép:

bao gồm tệp1 tệp2 tệp3 $ (other_include_files)

Nếu bạn đang làm việc trên một bản dựng cần hoạt động với cả GNU make và makepp,
đôi khi thật tiện lợi khi có các trang điểm giống hệt nhau nhưng bao gồm khác
tập tin. Ví dụ: tất cả các trang điểm của bạn có thể chứa một dòng như thế này:

bao gồm $ (TOPDIR) /standard_rules.mk

Và bạn muốn tiêu chuẩn_rules.mk khác nhau cho GNU make và makepp. Để tạo điều kiện
này, câu lệnh "bao gồm" Thành phố điện khí hóa phía tây dãy núi Rocky đầu tiên tìm kiếm một tệp có hậu tố là .makepp trước
tìm kiếm tệp bạn yêu cầu. Trong trường hợp này, trước tiên nó sẽ tìm kiếm một tệp
gọi là tiêu chuẩn_rules.mk.makeppvà nếu điều đó tồn tại, nó sẽ tải nó thay vì
tiêu chuẩn_rules.mk. Bằng cách này, khi bạn chạy makefile với GNU make, nó sẽ tải
tiêu chuẩn_rules.mk, nhưng với makepp, nó tải tiêu chuẩn_rules.mk.makepp.

Bởi vì nhiều tệp kế thừa đặt quy tắc tạo tệp bao gồm sau khi bao gồm
tuyên bố, makepp sẽ trì hoãn các quyết định về bao gồm không còn tồn tại hoặc cũ cho đến cuối cùng
tải makefile. Đó là, trừ khi nó được gọi bằng "--rm-stale". Cho càng nhiều
khi tình hình đã được cải thiện sau đó (vì một quy tắc đã xuất hiện) makepp sẽ
tải lại makefile, điều này có thể làm xuất hiện thêm nhiều quy tắc như vậy. Đây rõ ràng là
một cách không hiệu quả để tải các tệp trang điểm, vì vậy hãy cố gắng tránh điều đó. Tệ hơn nữa, nếu makefile của bạn
tải có tác dụng phụ (như thêm vào một biến toàn cục hoặc một dòng như
"do_it_now: = $ (shell cat a >> b)" hoặc makepp tương đương "& cat a -o >> b") họ sẽ
xảy ra nhiều lần khi tệp makefile cần được tải, vì vậy, một lần nữa, hãy cố gắng tránh điều đó!

_bao gồm trang điểm
bao gồm trang điểm
Một biến thể nhỏ trên "include", câu lệnh "_include" bao gồm tệp nếu nó tồn tại
nhưng không tạo ra lỗi nghiêm trọng nếu không. Câu lệnh "_include" được sử dụng để
quan trọng đối với tính năng quét tệp bằng GNU make, nhưng ít hữu ích hơn đối với makepp.

tải_makefile / some / directory / where / Makefile
tải_makefile con gái nhỏ
tải_makefile VAR1 = value1 VAR2 = value2 con gái nhỏ
Câu lệnh này khiến makepp chuyển cd đến thư mục chứa makefile và tải
quy tắc của nó vào cơ sở dữ liệu nội bộ của makepp. Nếu bạn chỉ định một thư mục thay vì
một makefile, "load_makefile" tìm kiếm "Makeppfile", "makefile" hoặc "Makefile" trong đó
thư mục.

Bất kỳ biến nào bạn chỉ định với cú pháp "VAR = value" (hoặc "VAR =" value1 value2 "") là
được chuyển đến các tệp makefiles đã tải. Họ ghi đè bất kỳ cài đặt nào trong các cấu hình đó, chỉ
như thể bạn đã gõ chúng trên dòng lệnh.

Sử dụng "load_makefile" khác với lệnh

bao gồm dir / makefile

trong hai cách. Đầu tiên, "load_makefile" không chuyển bất kỳ biến nào từ top-
cấp makefile vào makefile cấp dưới; mỗi makefile tồn tại trong riêng nó
không gian tên. Makefile cấp dưới không thể ảnh hưởng đến các biến trong cấp cao nhất
makefile theo bất kỳ cách nào.

Thứ hai, mỗi lệnh xây dựng được gắn thẻ với thư mục của tệp makefile mà nó đến
từ. Khi makepp thực thi một quy tắc từ một makefile khác, đầu tiên nó sẽ cd tới
thư mục chứa makefile đó trước khi thực hiện lệnh. Makefiles đó là
được thấy với câu lệnh "include" thực sự được coi là một phần của makefile
đã bao gồm chúng, và do đó các quy tắc của chúng không được gắn thẻ với một thư mục khác.

Bạn thường không phải tải makefile một cách rõ ràng, trừ khi nó có tên khác thường,
hoặc nó có các mục tiêu không được chứa trong cùng một thư mục với makefile
chính nó, hoặc bạn đã tắt tải makefile ngầm. Theo mặc định, nếu makepp là
đang cố gắng tạo tệp và không có quy tắc để tạo tệp đó hoặc nếu nó đang đánh giá
tên tệp được ký tự đại diện trong một thư mục, nó sẽ tự động cố gắng tải một tệp makefile
từ thư mục đó. Xem "Mẹo cho nhiều thư mục" trong makepp_cookbook để biết thông tin
trên việc xây dựng với nhiều thư mục.

Bạn không thể sử dụng "load_makefile" để tải một số tệp trang điểm áp dụng cho cùng một tệp
danh mục. Sử dụng "include" cho một số phần của makefile áp dụng cho cùng một
thư mục và "load_makefile" cho các tệp trang áp dụng cho các thư mục khác nhau.

no_implicit_load
Câu lệnh này tắt tính năng tải ngầm các tệp trang từ một tập hợp các thư mục.
Điều này có thể hữu ích nếu bạn muốn tải các tệp trang điểm tự động từ hầu hết các thư mục,
nhưng có một số thư mục vì nhiều lý do mà bạn không muốn makepp
cố gắng cập nhật. (Ví dụ: có thể thư mục có makefile cho một số phiên bản khác
của make mà makepp không hiểu.) Ví dụ:

no_implicit_load dir1 dir2 / *

Câu lệnh trên sẽ tắt tải ngầm cho các tệp makefiles trong "dir1" tất cả các of
của nó thư mục con. Nó cũng sẽ chuyển sang tải makefile ngầm cho tất cả
thư mục con của "dir2" (và tất cả các thư mục con của chúng), nhưng không phải cho chính "dir2".

Bạn có thể sử dụng các ký tự đại diện trong câu lệnh. Các tệp không phải thư mục khớp với ký tự đại diện
bị bỏ qua. Bạn cũng có thể sử dụng các hàm để chỉ định thêm các thư mục mà bạn
quan tâm đến, ví dụ,

no_implicit_load $ (lọc ra dir1 dir2, *)

sẽ tắt tải ngầm cho tất cả các thư mục con ngoại trừ you1you2 và họ
thư mục con.

xây dựng trước mục tiêu
làm cho mục tiêu
Các đối số (trải qua mở rộng biến Make-style) được tạo ngay lập tức.
Điều này hữu ích khi danh sách các mục tiêu mà Makefile có thể xây dựng phụ thuộc vào
tệp được tạo trong một thư mục khác.

Hiện tại, nó sẽ lặng lẽ không xây dựng được mục tiêu nếu có một vòng lặp phụ thuộc giữa các
các mục tiêu được tạo sẵn và các tệp Makefiles phải được tải để xây dựng chúng, nhưng điều đó
phải được coi là một lỗi.

register_command_parser lệnh_từ phân tích cú pháp
đăng ký_parser lệnh_từ phân tích cú pháp
Khi phân tích từ vựng các hành động quy tắc, hãy sử dụng phân tích cú pháp cho lệnh_từ, có thể là
đường dẫn đầy đủ hoặc chỉ tên cơ sở. Tên cơ sở thường là đủ vì lexer
thử cả hai.

Sản phẩm phân tích cú pháp có thể là một tên lớp có hoặc không có phần đầu
"Mpp :: CommandParser ::". Một lớp như vậy phải có một hàm thành viên được gọi là "nhà máy"
trả về một đối tượng của lớp đó. Nếu tên lớp chứa dấu hai chấm, nó phải là
trích dẫn, để không làm cho dòng này giống như một quy tắc.

Hoặc, vì lớp đó thường chưa được tải, thay vào đó, hàm gốc có thể
nằm trong không gian tên Makefile. Các hàm này có tiền tố là "p_" phải
không được đưa ra. Đây là trường hợp của trình phân tích cú pháp nội trang.

Hiệu ứng có thể so sánh với tùy chọn quy tắc ": trình phân tích cú pháp". Nhưng đối với các quy tắc đa lệnh
đây là cách tốt hơn.

đăng ký_input_suffix lệnh_từ hậu tố ...
Thêm "hậu tố" ... vào danh sách các hậu tố tệp đầu vào được nhận dạng khi một hành động
bắt đầu bằng "command_word" được phân tích cú pháp. Trình phân tích cú pháp thường sẽ nhận thông tin này qua
Mpp :: CommandParser :: input_filename_regexp, nhưng thay vào đó nó có thể bỏ qua điều này hoàn toàn.

Bộ phân tích cú pháp thường không chọn tất cả các đối số không được coi là tùy chọn,
bởi vì chúng có thể là đối số của các tùy chọn không được công nhận. (Ví dụ, i386v is không
một tệp đầu vào của lệnh "gcc -b i386v foo.c".) Thay vào đó, họ chỉ nhận
đối số vị trí trông giống như tên tệp đầu vào.

Không có gì lạ khi sử dụng các công cụ tiêu chuẩn với các hậu tố không chuẩn cho trang web cụ thể trong
để biểu thị rằng các tệp đó yêu cầu xử lý đặc biệt, chẳng hạn như lệnh khác
các tùy chọn và / hoặc các bước xử lý sau. Ví dụ:

register_input_suffix cpp .vpp
% .v:% .vpp
cpp $ <> $ @

kho thư mục
kho destdir = srcdir
Chỉ định một hoặc nhiều thư mục kho lưu trữ. Kho lưu trữ đầu tiên được chỉ định có
ưu tiên hơn những cái khác nếu cùng một tệp tồn tại trong nhiều kho lưu trữ và ở đó
không phải là lệnh xây dựng cho nó. Xem makepp_repositories để biết thêm chi tiết về
kho lưu trữ.

Nếu bạn chỉ định một thư mục sau "kho lưu trữ", thì nội dung của nó sẽ được liên kết với
thư mục hiện tại. Bạn có thể liên kết nội dung của nó vào bất kỳ vị trí tùy ý nào trong tệp
hệ thống bằng cách chỉ định vị trí trước dấu bằng, ví dụ:

kho lưu trữ subir1 / subsir2 = / người dùng / joe / joes_nifty_library

Bạn nên đặt câu lệnh kho lưu trữ gần đầu makefile của mình, trước bất kỳ
các quy tắc có thể cần sử dụng nó.

thời gian chạy chương trình, thư viện
Lưu trữ "thư viện" dưới dạng phụ thuộc thời gian chạy của "chương trình". Cả "chương trình" và "thư viện"
có thể chứa nhiều từ, trong trường hợp đó mỗi từ trong "thư viện" được lưu trữ dưới dạng
thời gian chạy phụ thuộc của mỗi từ trong "chương trình". Khi "chương trình" được thêm tự động
như là phần phụ thuộc có thể thực thi của một lệnh bởi lớp cơ sở "Mpp :: CommandParser",
phụ thuộc thời gian chạy (nếu có) cũng được thêm vào. Để điều này xảy ra,
"chương trình" phải được chỉ định trong quy tắc với một thành phần thư mục và không có bất kỳ
các ký tự meta shell. Mục đích của câu lệnh này là để nắm bắt các phụ thuộc vào
thư viện và các tệp thực thi khác thường được chương trình tải mà không cần
để chỉ định chúng một cách rõ ràng dưới dạng phụ thuộc của mỗi quy tắc gọi "chương trình" hoặc
quét "chương trình" để xác định những phụ thuộc đó (có thể là
khó.)

Phụ thuộc thời gian chạy được duyệt đệ quy, vì vậy nếu "a" có phụ thuộc thời gian chạy trên
"b" và "b" có phụ thuộc thời gian chạy vào "c", thì bất kỳ quy tắc nào sử dụng "./a" sẽ có
phụ thuộc ngầm định vào cả "b" và "c" (trừ khi nó sử dụng
Lớp "Mpp :: CommandParser" ghi đè hành vi này).

Lưu ý rằng các phần phụ thuộc bị thiếu sẽ không nhất thiết phải được thêm vào sau khi bạn thêm câu lệnh này
vào makefile, trừ khi quy tắc được quét lại. Sử dụng dòng lệnh "--force-rescan"
để đảm bảo rằng điều này xảy ra.

chữ ký tên
[toàn cầu] [ghi đè] chữ ký tên
chữ ký md5
chữ ký C
chữ ký c_compilation_md5
chữ ký xml
chữ ký xml-space
chữ ký mặc định

Đặt phương thức chữ ký cho tất cả các quy tắc sau câu lệnh "chữ ký", cho
không có trình phân tích cú pháp lệnh nào chọn một phương thức. Bạn có thể ghi đè điều này cho các quy tắc riêng lẻ với
công cụ sửa đổi quy tắc ": chữ ký".

Nếu bạn thêm từ khóa "ghi đè", thì phương pháp này sẽ ghi đè ngay cả lựa chọn
được thực hiện bởi trình phân tích cú pháp lệnh, nhưng không phải những trình phân tích cú pháp được chỉ định với công cụ sửa đổi quy tắc ": chữ ký".
Nếu bạn thêm từ khóa "toàn cầu", hiệu ứng sẽ áp dụng cho tất cả các quy tắc chưa được đọc,
trừ khi makefile của họ cũng có câu lệnh "chữ ký" của riêng nó. Điều này tương đương với
tùy chọn dòng lệnh "--signature" nếu được cung cấp trước khi bất kỳ quy tắc nào được đọc, ví dụ: trong một
RootMakeppfile để chắc chắn rằng nó được nhìn thấy đủ sớm. Tương tự như vậy, các từ khóa "toàn cầu
ghi đè "cho câu lệnh này tương đương với dòng lệnh" - ghi đè-chữ ký "
tùy chọn.

Chỉ định "mặc định chữ ký" thay vì tên nếu bạn muốn quay lại mặc định.
Với từ khóa "toàn cầu", điều này có nghĩa là thời gian sửa đổi đơn giản và kích thước tệp
phương pháp. Nếu không, điều này sẽ hoàn nguyên makefile hiện tại không có phương thức cụ thể của riêng nó,
sử dụng một phương thức toàn cục nếu một phương thức đã được thiết lập.

Để biết thêm thông tin về các phương pháp chữ ký, hãy xem makepp_signatures.

vpath Belt Hold thư mục ...
Tìm nạp tất cả các tệp phù hợp với mẫu từ mỗi thư mục nhất định. Mẫu có thể chứa tại
hầu hết một ký tự đại diện "%". Điều này sử dụng cơ chế kho lưu trữ minh bạch (không giống như gmake
viết lại tên tệp), nhưng nó không đệ quy vào thư mục con.

Lệnh
Tất cả các lệnh nội trang và lệnh tự định nghĩa (xem lệnh nội trang và mở rộng makepp),
vì các tập lệnh Perl được lập trình sạch bên ngoài có thể được sử dụng giống như các câu lệnh. Trong trường hợp này
chúng khác với các hành động quy tắc ở chỗ chúng chạy trong cùng một quy trình như makepp và bất kỳ đầu vào nào
hoặc các tệp đầu ra không được ghi nhận là tệp phụ thuộc hoặc được tạo bởi makepp.

Như với tất cả các câu lệnh, chúng được coi là như vậy, nếu chúng được thụt lề nhỏ hơn
các hành động của quy tắc trước đó, nếu có.

Điều này có thể được sử dụng cho các thông báo được xuất ra trong khi đọc makefile:

& echo Giá trị của $$ (VAR) là $ (VAR)

Hoặc thay vì đưa ra nhiều quy tắc, mỗi quy tắc phụ thuộc vào một quy tắc tạo thư mục, bạn có thể đơn giản
tạo ra nó một cách nhanh chóng. Lưu ý rằng các lệnh tạo tệp được xử lý lại mỗi
thời gian tệp makefile được đọc., Đó là lý do tại sao chúng tôi bảo vệ tệp này bằng một bài kiểm tra - mặc dù trong điều này
trường hợp đặc biệt sẽ không cần thiết, vì lệnh này sẽ không gây hại gì khi được lặp lại:

ifperl! -d 'bao gồm'
& mkdir -p gồm # Chỉ tạo nếu không có
endif

Sử dụng makepp_statements 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

  • 1
    máy xúc lật
    máy xúc lật
    abi-dumper - một công cụ để loại bỏ ABI của một
    Đối tượng ELF chứa thông tin gỡ lỗi DWARF
    MÔ TẢ: TÊN: ABI Dumper
    (abi-dumper) Kết xuất ABI của đối tượng ELF
    chứa DW...
    Chạy abi-dumper
  • 2
    abi-theo dõi
    abi-theo dõi
    abi-tracker - trực quan hóa các thay đổi ABI
    dòng thời gian của thư viện phần mềm C/C++.
    MÔ TẢ: TÊN: ABI Tracker
    (abi-tracker) Trực quan hóa các thay đổi ABI
    dòng thời gian của C/C+...
    Chạy abi-tracker
  • 3
    liên kết sao chép
    liên kết sao chép
    copylink - thay thế một liên kết bằng một bản sao
    của tệp được liên kết ...
    Chạy copylinkp
  • 4
    sao chép
    sao chép
    copymat - chuyển đổi ma trận ASCII thành một
    cơ sở dữ liệu phù hợp để đọc nhanh ...
    Chạy bản sao
  • 5
    gatling
    gatling
    gatling - máy chủ tệp hiệu suất cao ...
    chạy gatling
  • 6
    bánh gato
    bánh gato
    gatos-conf - Cấu hình GUI GATOS
    ứng dụng. ...
    Chạy gatos-conf
  • Khác »

Ad