Có nhiều cách tiếp cận khác nhau. Và bạn có thể làm cho chúng có thể cấu hình được.
- Nếu bạn thêm
@
dấu ở phía trước của dòng trong quy tắc, lệnh bản thân sẽ không được in, nhưng sản lượng của nó sẽ.
- Nếu bạn thêm
-Werror
để biến CFLAGS
của bạn (bạn có một, không bạn Đó là một thực tế phổ biến?!), Bạn chắc chắn sẽ không bỏ lỡ bất kỳ cảnh báo - xây dựng sẽ dừng lại sau khi người đầu tiên.
- Bạn có thể chuyển hướng đầu ra tiêu chuẩn của lệnh sang
/dev/null
, chỉ để lại luồng lỗi (điều này không dành cho trường hợp cụ thể của bạn, vì gcc thường không mang lại kết quả đầu ra nhưng có thể hữu ích cho các lệnh khác).
Thật không may, đối với qmake
chỉ áp dụng phương pháp thứ hai. Thêm vào tệp dự án của bạn:
QMAKE_CFLAGS+=-Werror
QMAKE_CXXFLAGS+=-Werror
Và makefiles được tạo sẽ sử dụng các cờ này khi họ gọi trình biên dịch, do đó, việc xây dựng sẽ dừng lại ở mọi cảnh báo.
(phần này sẽ được chuyển sang câu hỏi khác ngay khi câu hỏi xuất hiện).
Thông thường, bạn có thể sử dụng tất cả - bạn có thể làm cho tất cả có thể định cấu hình! Dưới đây là ví dụ:
trace?=short
ifeq ($(trace),short)
[email protected]
redirect_to_null=1>/dev/null
else ifeq ($(trace),full)
suppress_echo=
redirect_to_null=
else ifeq ($(trace),werror)
CFLAGS+=-Werror
else
$(error Incorrect trace type "$(trace)"!)
endif
# Thanks to Martin York for the source of this copy-pasted code
out.ext: $(OBJ)
@echo $(CC) $(CFLAGS) -o out.ext $(redirect_to_null)
$(suppress_echo)$(CC) $(CFLAGS) -o out.ext $(OBJ) $(redirect_to_null)
Vì vậy, nếu bạn gọi make
như thế này:
$ make trace=full
nó sẽ in tất cả mọi thứ. Nếu bạn gọi
$ make
giá trị short
sẽ được sử dụng bởi mặc định (chú ý ?=
điều hành thay vì thông thường =
!) Và các quy tắc sẽ mở rộng lên phiên bản như vậy
out.ext: out.o
@echo cc -o out.ext 1>/dev/null
@cc -o out.ext out.o 1>/dev/null
gì sẽ cung cấp cho nhiều càng tốt nhu cầu.
Cách tiếp cận như vậy, với cấu hình, được sử dụng trong mã sản xuất.Ví dụ, tôi đã thấy nó trong các tệp makefiles của IcedTea của Ubuntu.
tuyệt vời. chính xác những gì tôi cần –