2009-09-29 46 views
9

làm cách nào tôi có thể định dạng đầu ra thực hiện (!! bằng cách chỉ thay đổi tệp dự án qmake !!). Đường biên dịch của tôi tiếp tục phát triển và các cảnh báo/lỗi một dòng gần như biến mất giữa chúng.Cách định dạng/thay đổi đầu ra xây dựng qmake

Tôi đang nghĩ đến một cái gì đó giống như

$(CC) in.ext -o out.ext 

nhờ về vấn đề

Trả lời

16

Trong qmake, bạn có thể thêm một tùy chọn cấu hình im lặng:

CONFIG += silent 

(lưu ý:.. Tôi nghĩ đó là lệnh Đó là một cái gì đó tương tự như sau)

nào nên ngăn chặn hầu hết các đầu ra, và chỉ in các dòng như "biên dịch ao", cùng với cảnh báo và lỗi của bạn. Tôi tin rằng điều này tương tự như chỉ thị make 's .SILENT. (tôi nghĩ đó là một ...)

Bạn có thể muốn cẩn thận với điều này, tuy nhiên, vì nó ngăn chặn rất nhiều thông tin mà trình phân tích cú pháp lỗi muốn sử dụng. Ví dụ, nếu bạn đang biên dịch với cấu hình SUBDIRS, nó sẽ không in ra khi nó thay đổi thành các thư mục khác nhau.

+0

tuyệt vời. chính xác những gì tôi cần –

0

Bạn có thể ngăn chặn các bản in với '@' và echo những gì bạn muốn xem: Ví dụ

đơn giản:

out.ext: $(OBJ) 
    @echo $(CC) -o out.ext 
    @$(CC) -o out.ext $(OBJ) $(OTHER_FLAGS_ETC) 
+0

Uh Tôi muốn tạo ra sự kỳ diệu và chỉ bên trong qmake. Xin lỗi vì sự nhầm lẫn. –

+1

OP yêu cầu cho qmake –

5

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.

+0

Uh Tôi muốn tạo ra sự kỳ diệu và chỉ bên trong qmake. Xin lỗi vì sự nhầm lẫn. –

+0

+1: cho -Werror. Đó là gợi ý tốt nhất IMO và _can_ này được thực hiện trong tệp dự án của bạn. – Troubadour

+0

@hydroes: đã chỉnh sửa câu trả lời của tôi để cố gắng đáp ứng nhu cầu của bạn –

Các vấn đề liên quan