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

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

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

Chạy makepp_incompatibilities 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_incompatibilities 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_incompatibilities - Sự không tương thích giữa makepp và GNU make

MÔ TẢ


Makepp được thiết kế để gần với GNU nhất có thể
(<http://www.gnu.org/software/make/manual/make.html>). Công cụ tự động GNU
(<http://www.gnu.org/software/automake/manual/automake.html>), CMake
(<http://www.cmake.org/>), Bản làm trước (http://industriousone.com/premake> và xem nhận xét
dưới đây) hoặc các hệ thống xây dựng kế thừa được làm thủ công phải có thể xây dựng được với makepp. Đây là như vậy
bạn có thể di chuyển các dự án một cách dễ dàng. Hoặc nếu bạn không muốn tận hưởng tất cả
Ưu điểm của makepp (ví dụ như để những người khác vẫn có thể xây dựng dự án của bạn với GNU make) trong khi bạn
lợi nhuận từ lợi thế độ tin cậy cho sự phát triển của bạn.

Tuy nhiên, do sự khác biệt về triết lý, một số sản phẩm GNU hoặc POSIX làm cho
(<http://pubs.opengroup.org/onlinepubs/009695399/utilities/make.html>) các tính năng không được
được hỗ trợ. Một số ít chưa được thực hiện vì chúng tôi không có thời gian. Hầu hết các
sự khác biệt so với GNU là khá kỹ thuật và hiếm khi gây ra sự cố. Chao ôi cái
các giải pháp thay thế cho việc đi tắt đón đầu của cách làm truyền thống ngày càng trở nên phức tạp hơn,
và đang gây khó khăn cho makepp.

Tóm lại, nếu nó không xây ra khỏi hộp, hãy thử:

makepp --no-warning makepp_simple_concatenation = 1 makepp_percent_subdirs = 1 \
--build-check = target_newer --last-cơ hội-quy tắc --no-remake-makefiles

Nếu điều đó thành công, bạn có thể thử loại bỏ từng lập luận một. Nhưng nếu thất bại,
thử thêm:

--truyền thống-đệ quy-làm

Nếu điều đó cũng không thành công, hệ thống xây dựng cần một số điều chỉnh để hợp tác với makepp. Cũng
nếu một số tùy chọn được mô tả ở đây làm cho thứ gì đó có thể xây dựng được, bạn vẫn nên điều chỉnh
một chút, để chúng trở nên tương thích với cả hai sản phẩm.

Buộc chi tiết POSIX or GNU làm cho khả năng tương thích


Dưới đây là một số khả năng dòng lệnh để làm cho nhiều hệ thống xây dựng kế thừa hoạt động
mà không cần sửa đổi. Chúng khiến makepp mô phỏng chính xác hành vi của GNU make.

Khả năng tương thích thông qua các tùy chọn: "--build-check = target_newer"
Theo mặc định, makepp sẽ cố gắng xây dựng lại tất cả các mục tiêu nếu bất kỳ phần phụ thuộc nào có
đã thay đổi kể từ lần xây dựng cuối cùng hoặc nếu lệnh đã thay đổi (xem makepp_build_check để biết
thông tin chi tiết). Đây thường là những gì bạn muốn. Tuy nhiên, đôi khi bạn không muốn mục tiêu
được xây dựng lại nếu nó đã được sửa đổi ngoài sự kiểm soát của makepp (ví dụ: bằng cách chỉnh sửa
hoặc bằng cách chạy một chương trình theo cách thủ công để tạo tệp). Bạn có thể buộc makepp sử dụng
thuật toán tạo truyền thống, chỉ xây dựng lại nếu bất kỳ mục tiêu nào mới hơn
phụ thuộc, bằng cách thêm tùy chọn này vào dòng lệnh.

Khả năng tương thích thông qua các tùy chọn: "--dont-build = config.status"
Có những gói cố gắng tự động cấu hình hoặc làm những việc khác, điều này
bỏ qua trừ khi được yêu cầu, như:

config.status: cấu hình
./config.status - kiểm tra

config: config.in aclocal.m4
tự động cấu hình

Hầu hết mọi người thậm chí không cài đặt "autoconf", vì vậy hãy tận tâm làm mọi thứ bằng cách
các quy tắc, như makepp, sẽ không thành công. Tùy chọn này ngăn chặn điều đó, nếu bạn tìm ra điều gì
không phải để xây dựng.

Khả năng tương thích thông qua các tùy chọn: "--last-cơ hội-quy tắc"
Các quy tắc mặc định (quy tắc mẫu không có phụ thuộc mẫu) thường không được hỗ trợ.
Makepp khởi tạo tất cả các quy tắc dựa trên các tệp hiện có, để nó biết mọi
tệp có thể được tạo. Than ôi theo cách này nó không biết làm thế nào để tạo một mẫu
quy tắc không có mẫu phụ thuộc. Cơ chế: last_chance khắc phục một phần điều đó.
Khi điều này đủ tốt cho các tệp trang điểm kế thừa, tùy chọn này cho phép bật tính năng này trên toàn cầu.

Khả năng tương thích thông qua các tùy chọn: "--không cảnh báo"
Điều này không cải thiện kết quả. Makepp sẽ đưa ra những thông điệp cảnh báo về nhiều thứ
mà Unix truyền thống thực hiện chấp nhận mà không nao núng. Điều này là bởi vì có
những cách tốt hơn để thực hiện chúng với makepp. Nếu những cảnh báo này làm phiền bạn, bạn có thể tắt chúng
với tùy chọn này.

Khả năng tương thích thông qua các tùy chọn: "--hybrid-recursive-make"
Các lệnh gọi đệ quy của make thường được coi là một thực hành không an toàn (xem "Tốt hơn
hệ thống cho các bản dựng phân cấp "trong makepp để biết chi tiết), nhưng chúng cực kỳ phổ biến trong
trang điểm hiện có. Makepp hỗ trợ tạo đệ quy để tương thích ngược; cho mới
makefiles, tốt hơn nhiều là sử dụng câu lệnh "load_makefile", hoặc hàm ẩn của makepp
cơ chế tải makefile.

Để có thể sử dụng kho lưu trữ cho các bản dựng biến thể và giúp tạo đệ quy
các lệnh gọi làm an toàn hơn, makepp thông thường không thực sự gọi chính nó một cách đệ quy
ngay cả khi bạn nói với nó. Thay vào đó, một quy trình con giao tiếp với quy trình mẹ và
bản dựng thực tế được thực hiện bởi quy trình mẹ.

Điều này hoạt động trong hầu hết các trường hợp, nhưng bạn không thể gọi một số tệp trang điểm từ cùng một
thư mục, ví dụ, sau đây sẽ không hoạt động:

target: phụ thuộc
Các mục tiêu $ (MAKE) -f other_makefile

Trong trường hợp này, makepp thông báo rằng nó đang tải tệp trang thứ hai và phàn nàn. Với tùy chọn này
thay vào đó, nó sẽ quay trở lại cách xây dựng truyền thống từ các trang điểm bổ sung trong
mỗi quy trình makepp riêng biệt.

Lưu ý: Về mặt kỹ thuật tải một số tệp trang điểm sẽ không có vấn đề gì, nhưng chúng thường có
cùng một tên mục tiêu giả mạo. Giữ điều đó khác biệt có nghĩa là một thiết kế lại hoàn toàn của makepp
nội bộ. Tuy nhiên, điều này sẽ hoạt động, nhưng nó không tương đương:

target: phụ thuộc
cd subir && $ (MAKE) -f mục tiêu khác_makefile

Khả năng tương thích thông qua các tùy chọn: "--traditional-recursive-make"
Đôi khi tùy chọn trước đó là không đủ, đặc biệt nếu các lệnh gọi đệ quy sử dụng
các lựa chọn trái ngược nhau. Makepp chỉ sử dụng một tập hợp các tùy chọn toàn cầu, vì vậy một phiên bản phụ không
được phép sửa đổi chúng, vì điều đó cũng sẽ liên quan đến các trang điểm khác.

Thêm tùy chọn này vào dòng lệnh, có các tác dụng phụ không mong muốn sau:

· Đệ quy làm cho nội bộ không thực thi song song, ngay cả khi cha mẹ làm.
Không giống như gmake, không có sự điều phối tổng thể về số lượng quy trình. Điều này sẽ
không được thực hiện vì cách làm việc này không phải là mục tiêu thiết kế của makepp.

· Quy trình đệ quy làm cho không biết gì về kho lưu trữ.

· Mỗi quy trình thực hiện đệ quy tạo ra tệp nhật ký của riêng nó, trong thư mục nó được gọi
thay vì tạo một tệp nhật ký cho toàn bộ bản dựng.

· Vì makepp thường xây dựng nhiều hơn so với truyền thống nên được coi là cần thiết, và vì nhiều
xây dựng hệ thống cung cấp các cuộc gọi đệ quy theo mọi hướng, điều này có thể dẫn đến vô số
đệ quy. Makepp sẽ kéo phanh sau 50 vòng và cho bạn biết cách tăng
rằng, trong trường hợp bạn thực sự có tổ sâu như vậy.

Ngay cả với tùy chọn "--traditional-recursive-make", các biến môi trường
"MAKEOVERRIDES" và "MFLAGS" không được thiết lập và bị bỏ qua, vì vậy các cấu hình phụ thuộc vào
những thứ đó sẽ không hoạt động.

A Làm trước tạo ra makefile chỉ là một trình bao bọc vui nhộn cho một lời kêu gọi tạo phụ trong cùng một
danh mục. Nếu bạn có mục tiêu dự án nào đó XYZ nó sẽ có một dòng như thế

@ $ {MAKE} --no-print-directory -C. -f XYZ.make

Trong trường hợp này, bạn có thể tránh tùy chọn "--traditional-recursive-make" bằng cách gọi trực tiếp
makepp với cái đó "-f XYZ.make " tùy chọn.

Khả năng tương thích không có các tùy chọn: "--jobs =n"
Các makefiles kế thừa đôi khi sẽ không liệt kê tất cả các phần phụ thuộc, dựa vào thứ tự của
thực hiện để thực hiện chúng trong thời gian. Trong tình huống này, makepp có thể quản lý để gọi một quy tắc trước
tất cả các phụ thuộc của nó đã được thực hiện. Sau đó, kết quả có thể tốt hơn với ít hơn, hoặc thậm chí không
thực hiện song song.

Khả năng tương thích thông qua các biến: "makepp_simple_concatenation = 1"
Thay thế kiểu Rc là cách mặc định makepp thực hiện thay thế biến thành văn bản
chuỗi vì nó rất hiếm khi phá vỡ các cấu hình kế thừa và thường hữu ích trong
trang điểm. Tuy nhiên, nó đôi khi gây ra sự không tương thích trong việc thay thế
các biến không được bao quanh bởi dấu cách. Ví dụ,

INCLUDE_PREFIX: = -I / some / include / dir -I
BAO GỒM: = $ (INCLUDE_PREFIX) / khác / bao gồm / dir

sẽ đặt "INCLUDES" thành "-I / some / include / dir / other / include / dir -I / other / include / dir" nếu rc-
thay thế kiểu được bật, trong khi GNU make sẽ đặt nó thành
"-Tôi / một số / bao gồm / dir -I / khác / bao gồm / dir". Ví dụ: khi biên dịch Redis 2.6.5, nó cố gắng
chạy "printfgcc". Một sự kết hợp hài hước như vậy của hai lệnh là một dấu hiệu mạnh mẽ cho thấy
biến này là cần thiết để trở lại để tạo ngữ nghĩa.

Ngoài ra còn có sự không tương thích trong việc xử lý khoảng trắng trong một biến:

null: =
T: = -o $ (null) # T chứa -o theo sau bởi một khoảng trắng.
OUTFILE = $ (T) outfile

sẽ đặt "OUTFILE" thành "-ooutfile" nếu thay thế kiểu rc được bật, trong khi GNU thực hiện
sẽ đặt nó thành "-o outfile".

Cả hai điểm không tương thích này đều bị loại bỏ bằng cách đặt "makepp_simple_concatenation"
Biến đổi. Tuy nhiên, lưu ý rằng ngay cả với "makepp_simple_concatenation", makepp vẫn
xử lý khoảng trắng một cách không phù hợp trong một số trường hợp:

T: = -o # Đừng xóa bình luận này.

GNU đặt "T" để chứa "-o" theo sau là một khoảng trắng, trong khi makepp loại bỏ
dấu cách dù sao. Nếu bạn muốn có khoảng trống ở cuối, bạn phải đặt
"makepp_simple_concatenation" và cũng đặt "T" bằng cách sử dụng kỹ thuật liên quan đến hình nộm
biến chẳng hạn như "null", như được hiển thị ở trên.

Cách giải quyết tùy chọn "--no-remake-makefiles"
Mã nguồn mở điển hình yêu cầu gọi "config" để tạo các makefiles. Nhưng sau đó những
makefiles có thể chứa các quy tắc để làm lại makefile bằng cách gọi một số lệnh. Makepp sẽ
vui vẻ tuân thủ và cập nhật nó theo quy tắc. Nhưng đôi khi điều này có hại, vì vậy
chỉ cần bỏ qua nó.

Khả năng tương thích thông qua các biến: "makepp_percent_subdirs = 1"
Theo mặc định, "%" trong quy tắc mẫu không khớp với các thư mục. Điều này có nghĩa là một quy tắc như
điều này:

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

sẽ không được áp dụng cho các tệp như "../shared/xyz.c". Nếu bạn muốn nó khớp với các tệp trong
thư mục con cũng vậy, sau đó đặt biến "makepp_percent_subdirs = 1" trên dòng lệnh
hoặc gần phần đầu của makefile.

Khả năng tương thích thông qua các môi trường biến: $ MAKEPP_IGNORE_OPTS
Đôi khi các lệnh gọi đệ quy kế thừa vượt qua các tùy chọn mà makepp không hiểu.
Hy vọng rằng tùy chọn không quan trọng, nhưng nó ngăn makepp chạy. Với cái này
biến môi trường, bạn có thể yêu cầu makepp bỏ qua một số tùy chọn nhất định. Giá trị
sẽ là một danh sách các tùy chọn được phân tách bằng dấu cách, có thể có 4 biến thể:

--Dài=x
Một tùy chọn dài mong đợi một cuộc tranh cãi. Thực tế này phải được tuyên bố thông qua
, mặc dù việc sử dụng thực tế cũng có thể được phân tách bằng khoảng trắng, "--long = bla" hoặc
"--long bla".

--Dài
Một lựa chọn dài mà không cần đối số.

-sx Một tùy chọn ngắn cần một đối số. Thực tế này phải được khai báo bằng cách thêm
một cái gì đó ngay sau tùy chọn, mặc dù việc sử dụng thực tế cũng có thể được phân tách bằng
khoảng trắng, "-sbla" hoặc "-s bla".

-s Một lựa chọn ngắn không có đối số.

Ví dụ: ghi đè tùy chọn -R của makepp từng cái một mà không có đối số và chấp nhận gỡ lỗi của gmake
tùy chọn với một đối số:

xuất MAKEPP_IGNORE_OPTS = '- R --debug = x'

Tính không tương thích việc này yêu cầu makefile thay đổi


· Makefiles gọi một cách rõ ràng khiến cho makepp không thể tự xây dựng mọi thứ.
"ExtUtils :: MakeMaker" của chính Alas Perl thực hiện hành vi thứ hai trong hai dạng sau của
lỗi này lên đến phiên bản 6.56 (Perl 5.12.1):

tiểu thư:
cd subir; chế tạo

MAKE = làm cho

· Đặt biến "VPATH" thành một số giá trị sẽ gọi ngầm là "vpath% value". "vpath"
các câu lệnh được mô phỏng với cơ chế kho lưu trữ. Vì vậy, nơi sản xuất các sản phẩm thay thế
đường dẫn đến tệp được tìm thấy trong vpath, makepp thay vào đó sẽ liên kết nó một cách tượng trưng với
nơi cần thiết. Do đó, makepp sẽ cung cấp một chuỗi không sửa đổi, thường là
không thành vấn đề.

Các mục tiêu trong một vpath không được hỗ trợ. (Gmake xem xét chúng nếu chúng mới hơn
phụ thuộc của chúng, nhưng nếu không, mục tiêu sẽ được tạo lại trong thư mục hiện tại
- khá mâu thuẫn.) Không hỗ trợ vpaths hủy thiết lập.

· Một quy tắc mẫu có mặt sau trong một tệp trang điểm sẽ ghi đè một quy tắc có trước đó.
Điều này là ngược so với GNU make.

· Tập hợp các quy tắc ngầm bên trong hơi khác so với các quy tắc dành cho GNU make,
mặc dù các tên biến phần lớn tương thích. Các quy tắc nội trang phải
biên dịch thành công các chương trình C / C ++ / Fortran và trên thực tế có thể đoán được
thư viện thích hợp trong một số trường hợp quá. Hỗ trợ cho Modula-2 và RatFor và các loại hiếm khác
ngôn ngữ cố tình không xuất hiện, bởi vì tôi tiếp tục gặp sự cố với GNU
quy tắc của make khi tôi vô tình sử dụng lại các tiện ích mở rộng cho các ngôn ngữ đó.

· Tiền tố hành động của "+" bị bỏ qua một cách im lặng.

· Các thành viên lưu trữ không được hỗ trợ và các biến tự động liên quan cũng vậy
$%, "$ (% D)" và "$ (% F)".

· Không có hỗ trợ SCCS.

· Khoảng trắng đầu và cuối trong các phép gán biến bị bỏ qua (ngay cả khi
khoảng trắng được theo sau bởi một nhận xét). Để biết thêm chi tiết về xử lý khoảng trắng
không tương thích, hãy xem "Khoảng trắng trong biến" trong makepp_variables.

· Makepp không cố gắng xây dựng lại các tệp được bao gồm với câu lệnh "include" trừ khi
makefile chứa một quy tắc để xây dựng chúng trước khi câu lệnh include được nhìn thấy.
(Tuy nhiên, nó sẽ cố gắng xây dựng lại chính makefile.) Điều này thường được sử dụng cho
xử lý bao gồm các phụ thuộc tệp và không hữu ích với makepp vì bạn không
cần phải làm điều đó bằng mọi cách.

· Biến "SHELL" hiện bị bỏ qua một phần. Makepp luôn sử dụng / Bin / sh
trừ khi / usr / xpg4 / bin / sh or / sbin / xpg4 / sh được tìm thấy hoặc trừ khi bạn xuất "SHELL"
biến trong makefile của bạn. Nhưng nếu bạn làm vậy, trình phân tích cú pháp lệnh có thể không hoàn toàn
hiểu lệnh shell của bạn làm gì. Trên Windows Strawberry hoặc ActiveState Perl
thay vào đó bạn phải đặt biến SHELL của mình trước gọi makepp.

· Sự phụ thuộc của bất kỳ thứ gì trên Makefile vẫn hoạt động, nhưng thường là không cần thiết.
Điều này thường được sử dụng để buộc xây dựng lại khi các tùy chọn biên dịch thay đổi. Makepp biết
khi các lệnh xây dựng đã thay đổi mà không có bất kỳ điều gì đặc biệt trong makefile; nó lưu trữ
điều này trên cơ sở từng tệp. Nếu bạn thay đổi makefile, nó sẽ biết chính xác
tệp cần biên dịch lại.

· Các tập tin trung gian không bị xóa. (Bởi vì makepp khăng khăng yêu cầu có tất cả các tệp
ngày tháng giống như trong lần xây dựng cuối cùng, tất cả các tệp trung gian đều phải
hiện tại hoặc nếu không sẽ xảy ra xây dựng lại.) Không có trạng thái đặc biệt dành cho
các tệp trung gian.

· Mục tiêu đặc biệt duy nhất được hỗ trợ là ".PHONY" và một phần ".SUFFIXES". Các
còn lại chỉ đơn giản là nhập.

Cụ thể, GNU make có các mục tiêu đặc biệt sau:

.Hậu Tố
Makepp bỏ qua ".SUFFIXES" ngoại trừ trường hợp đặc biệt của ".SUFFIXES" không có
phụ thuộc, như thế này:

.PHỤ LỤC:

điều này cho biết nó không tải bất kỳ quy tắc mặc định nào của nó.

.TRUNG CẤP, .THỨ CẤP, .PRECIOUS
Không có trạng thái đặc biệt nào được cấp cho các tệp trung gian và vì vậy các mục tiêu này không
có ý nghĩa.

.PHỚT LỜ
Mục tiêu này bị bỏ qua. Nếu bạn muốn bỏ qua lỗi, hãy đặt từ "ignore_error"
(hoặc dấu trừ) trước lệnh có trạng thái thoát sẽ bị bỏ qua.

.IM LẶNG
Mục tiêu này bị bỏ qua. Nếu bạn muốn các lệnh không lặp lại, hãy đặt từ "noecho"
(hoặc ký tự "@") phía trước lệnh không được lặp lại,
hoặc sử dụng tùy chọn "--silent" để makepp.

.DELETE_ON_ERROR
.EXPORT_ALL_VARIABLES
.NOXUẤT KHẨU
.POSIX
.VỠ NỢ
Các mục tiêu này không được hỗ trợ và đơn giản là bị bỏ qua.

· Các hàm làm cho GNU "eval", "flavour" và "value" hiện không được hỗ trợ. Bạn
có thể đạt được điều tương tự như eval theo cách dễ hiểu hơn với "$ [...]"
biến hoặc mở rộng hàm.

· Quy tắc dấu hai chấm không được hỗ trợ đầy đủ. (Chúng không thể là: trong mô hình của makepp,
không thể có nhiều hơn một cách để cập nhật mục tiêu.) Hiện tại, mỗi
quy tắc dấu hai chấm cho một mục tiêu nhất định chỉ cần thêm vào chuỗi lệnh và phần phụ thuộc của nó
danh sách chuỗi lệnh và danh sách phụ thuộc cho mục tiêu này. Ví dụ, nếu bạn
ghi chép lại cái đó:

một :: b
& cat b -oa

# Sau đó trong makefile của bạn:
AC
& cat c -o >> a

nó là chính xác giống như thể bạn đã viết

a: bc
& cat b -oa
& cat c -o >> a

Đây chắc chắn không phải là quy tắc dấu hai chấm nhằm mục đích và nó sẽ không phải lúc nào cũng
hoạt động, nhưng nó hoạt động với các mục tiêu như "sạch" hoặc cho tất cả những thứ
ExtUtils :: MakeMaker đưa vào trang điểm của nó. Đừng trông chờ vào nó cho bất cứ điều gì khác
hơn makefiles kế thừa.

· Hàm "$ (ký tự đại diện)" không chỉ đối sánh với các tệp tồn tại mà còn đối sánh với các tệp
chưa tồn tại, nhưng có một quy tắc mà makepp đã thấy tại thời điểm
Hàm "$ (ký tự đại diện)" được đánh giá.

· Câu lệnh "define" được hỗ trợ, nhưng việc xử lý "@" trước nó được thực hiện
khác nhau. Hiện trong makepp, "@" đứng trước một biến có nhiều dòng
giá trị sẽ chỉ triệt tiêu tiếng vang của dòng đầu tiên. Ví dụ,

xác định dòng tiếng vang
& echo dòng1 -o $ @
& echo line2 -o >> $ @
cuối cùng

x:
@ $ (echo-lines)

sẽ không ngăn chặn việc in "& echo line2" như trong GNU thực hiện; nó sẽ chỉ
ngăn chặn việc in "& echo line1".

· Makepp không hỗ trợ các biến môi trường sau (nó không thiết lập chúng,
và nó chỉ bỏ qua chúng):

TRANG ĐIỂM
MLAGS

Tính không tương thích in gọi món of biểu hiện mở rộng
· Trong makepp, các hành động quy tắc được mở rộng trước khi tất cả các phần phụ thuộc được đảm bảo
đã được xây dựng. Bạn có thể giải quyết vấn đề này bằng cách thay đổi các quy tắc như sau:

foo: thanh
genfoo <$ (thanh vỏ mèo)

này:

foo: thanh
genfoo <`thanh mèo`

hoặc điều này, sẽ tạo tệp trong quá trình mở rộng:

foo: thanh
genfoo <$ (& cat $ (làm thanh))

Điều này thích hợp hơn ở đây, vì tệp được liệt kê trong thanh cũng là một sự phụ thuộc của điều này
và makepp hiện có thể nắm bắt nó khi phân tích từ vựng việc chuyển hướng.

· Mặc dù tôi chưa thấy điều này được sử dụng, GNU make cho phép những điều sau:

dấu hai chấm =:
a $ (dấu hai chấm) b
echo $ ^

Makepp mở rộng "$ (dấu hai chấm)" quá muộn để điều này hoạt động. Tuy nhiên, nó cung cấp
cú pháp "$ [dấu hai chấm]" thay thế, có thể làm được nhiều việc hơn GNU tạo ra, bởi vì nó là
được mở rộng từ rất sớm.

"$ (MAKE)" có thể bao gồm không gian
Trong một makepp đã gỡ cài đặt hoặc nếu nền tảng dường như không hỗ trợ bắt đầu tập lệnh Perl
bằng số ma thuật hoặc với "--traditional-recursive-make" biến này sẽ bao gồm ít nhất
một không gian. Đó không phải là vấn đề khi sử dụng nó như một lệnh. Nhưng khi vượt qua nó như một
tham số không được trích dẫn cho một tập lệnh (như hệ thống xây dựng Perl 5.14.0), nó sẽ xé nó
tách biệt thành các thông số riêng biệt, dẫn đến nhầm lẫn. Vì vậy, với tư cách là một tham số, sẽ an toàn hơn khi
trích dẫn nó là '$ (MAKE)'. mà không phá vỡ khả năng tương thích ngược.

Mục tiêu cụ thể bài tập không tuyên truyền
Các biến mục tiêu cụ thể của Makepp hơi khác với GNU make ở chỗ chúng
chỉ áp dụng cho quy tắc cho một tệp được đề cập và không áp dụng cho bất kỳ tệp nào trước đó của nó; Thấy chưa
Nhiệm vụ cụ thể theo mục tiêu.

Dấu ngoặc đơn or niềng răng không tổ
Makepp kết thúc các biểu thức ở dấu ngoặc đơn hoặc dấu ngoặc nhọn phù hợp đầu tiên. Thay vì điều này

$ (một số chức năng ... () ...) # GNU tạo kiểu

bạn phải sử dụng một trong hai cái này

$ {một số chức năng ... () ...} # GNU làm cho tương thích
$ ((một số chức năng ... () ...)) # Tiện ích mở rộng Makepp

Điều này có thể sẽ được sửa trong phiên bản 2.1, có thể là tùy chọn.

Nhỏ điểm
Các phần phụ thuộc của mẫu không khớp với các mục tiêu giả mạo
% .a:% .b; ...
$ (xb rởm) :; ... # không cung cấp cách xây dựng xa

Nhận xét không có dòng tiếp tục
# Đây là \
KHÔNG phải bình luận 2 dòng

Lệnh hàng không tương thích


Makepp hỗ trợ một số tùy chọn dòng lệnh hữu ích hơn của make. Tuy nhiên, sau đây,
không được hỗ trợ:

-d hoặc --debug
-f -
Các đối tượng makefile bên trong của Makepp được liên kết với các đối tượng tệp, vì vậy nó không thể xử lý
stdin.

-i
-l hoặc --load-trung bình hoặc - max-load
-m Tùy chọn "-m" của Makepp liên quan đến lựa chọn phương pháp chữ ký, trong khi GNU thực hiện
bỏ qua -m.

-p hoặc --print-data-base
-q hoặc - câu hỏi
-R hoặc --no-nội trang-biến
Tùy chọn "-R" của Makepp thực sự làm điều gì đó hoàn toàn khác.

-S - không tiếp tục hoặc - dừng lại
Tùy chọn "--stop" dừng (chuyển sang chế độ ngủ) makepp sau khi học tất cả các quy tắc, vì vậy bạn
có thể tiếp tục chỉnh sửa.

-t hoặc --touch
-w hoặc --print-directory
Điều này xảy ra tự động.

- biến số không xác định

Một số trong số này có thể được hỗ trợ dễ dàng nếu bất cứ ai quan tâm.

Biến không tương thích


Makepp tìm kiếm trong $ PATH một lệnh phù hợp để trả về cho các biến như "$ (CC)" hoặc
"$ (CXX)", trong khi GNU make có mặc định tĩnh. Ngoài ra, makepp ưu tiên cho "gcc" và
"g ++" trong khi GNU đáng ngạc nhiên trả về "cc" cho cái trước, nhưng tương tự đối với
sau này. Bạn có thể ghi đè chúng trong makefile, trên dòng lệnh hoặc bằng cách xuất
biến cùng tên trước khi gọi makepp.

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