2012-06-12 25 views
23

tôi thấy rằng đây là một câu hỏi tương tự nhưLàm thực hiện lệnh in trước khi thực hiện khi không sử dụng CMake

Making cmake print commands before executing

Nhưng câu trả lời đó không làm việc cho tôi. Tôi đoán rằng câu trả lời chỉ hoạt động với cmake. Tùy chọn nào hoạt động mà không có cmake?

Note thử các

make VERBOSE=1 target 
make target VERBOSE=1 
VERBOSE=1 make target 
make V=1 target 
make target V=1 
V=1 make target 
make -V target 
make -v target 

ai trong số họ làm việc.

làm -v trả

GNU Make 3.81 
Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. 
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A 
PARTICULAR PURPOSE. 

This program built for x86_64-pc-linux-gnu 
+0

Chúng tôi đã có một số cuộc thảo luận về vấn đề này, nhưng tôi chỉ phát hiện ra một câu hỏi rằng trông rất giống: [Có cách nào để “làm cho” đến lệnh echo] (http://stackoverflow.com/q/4396107/1380680). –

+0

bản sao có thể có của [Làm cách nào để bắt buộc/gcc hiển thị cho tôi các lệnh?] (Http://stackoverflow.com/questions/5820303/how-do-i-force-make-gcc-to-show-me- các lệnh) –

Trả lời

74

Theo mặc định, make không in mỗi lệnh trước khi thực hiện nó. in này có thể được dập tắt bởi một trong những cơ chế sau:

  • trên cơ sở từng trường hợp cụ thể, bằng cách thêm @ vào đầu của lệnh
  • trên toàn cầu, bằng cách thêm .SILENT built-in mục tiêu .
  • ở đâu đó trong quá trình thực hiện, bằng cách gọi (các) tiểu tạo bằng một trong các cờ -s, --silent hoặc --quiet, ví dụ như trong $(MAKE) --silent -C someDir. Từ thời điểm đó, lệnh lặp lại bị triệt tiêu trong phần phụ.

Nếu makefile của bạn không in các lệnh, thì có thể bạn đang sử dụng một trong ba cơ chế này, và bạn phải thực sự kiểm tra (các) makefile để tìm ra.

Để khắc phục sự cố này, bạn có thể xác định lại vỏ được sử dụng để sử dụng chế độ gỡ lỗi, ví dụ như make SHELL="/bin/bash -x" target. Các shell khác có các tùy chọn tương tự. Với cách tiếp cận đó, nó không phải là make in các lệnh, mà chính là trình bao.

Nếu bạn sử dụng cờ -n hoặc --just-print, các cơ chế triệt tiêu tiếng vọng sẽ bị bỏ qua và bạn sẽ luôn thấy tất cả các lệnh make suy nghĩ phải được thực hiện - nhưng chúng không thực sự được thực thi, chỉ cần in. Đó có thể là một cách tốt để tìm ra những gì bạn thực sự có thể mong đợi để xem.

Biến số VERBOSE không có ý nghĩa tiêu chuẩn cho make, nhưng chỉ khi makefile của bạn diễn giải nó.

+1

SO không có cách nào để thực hiện in những gì nó đang thực hiện? -n không hoạt động vì tôi cần phải thấy nó thất bại trong bối cảnh và vì bất kỳ lý do nào thực thi đầu ra của -n không giống như không có nó. – gman

+0

Theo mặc định, 'make' * sẽ * in nội dung đang thực thi. Những gì tôi nói là makefile của bạn (s) có thể sử dụng một cơ chế để ngăn chặn echo-ing, hoặc bằng phương tiện của '@' đăng nhập trước lệnh, hoặc bằng phương tiện của built-in target '.SILENT'.Bạn phải nhìn vào makefile để xem nếu đó thực sự là trường hợp. –

+0

Cảm ơn, tôi đoán tôi đã hy vọng có một ghi đè như --verbose-level = 10000000 hoặc --ignore-silent Tôi không có quyền kiểm soát các makefiles của mình. Tôi đang ở trong một dự án với> 500 lập trình viên. – gman

1

Tôi nghĩ rằng đây là những gì bạn muốn: làm MAKE_VERBOSE = 1 mục tiêu

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