2012-05-09 23 views
11

Có biến nào tôi có thể sử dụng trong cmake để làm cho nó hoạt động giống như nó được chuyển qua tùy chọn -q không? Nó sẽ được tốt đẹp bởi vì tôi có một xây dựng rất modular mà được lộn xộn với cmakes đầu ra. Tôi đang sử dụng nó trong một dự án C++.yêu cầu cmake phải yên lặng

Trả lời

8

Không có biến nào mà tôi biết. Tuy nhiên, bạn có thể thêm các hack sau khi bắt đầu top-level của bạn CMakeLists.txt (trước project cuộc gọi) để kiểm soát đầu ra hơi:

function(message) 
    list(GET ARGV 0 MessageType) 
    if(MessageType STREQUAL FATAL_ERROR OR 
    MessageType STREQUAL SEND_ERROR OR 
    MessageType STREQUAL WARNING OR 
    MessageType STREQUAL AUTHOR_WARNING) 
    list(REMOVE_AT ARGV 0) 
    _message(${MessageType} "${ARGV}") 
    endif() 
endfunction() 

này ghi đè CMake tích hợp trong message lệnh và ngăn chặn tất cả STATUS và các tin nhắn không được phân loại, để lại các loại quan trọng hơn để xuất ra chính xác.

Kết quả của ví dụ: nhắn WARNING sẽ thay đổi từ

CMake Warning at CMakeLists.txt:14 (message): 
    This is a dummy warning message. 

để

CMake Warning at CMakeLists.txt:8 (_message): 
    This is a dummy warning message. 
Call Stack (most recent call first): 
    CMakeLists.txt:14 (message) 

Lưu ý rằng dòng thực tế nơi thông điệp cảnh báo được tạo ra được liệt kê trong các cuộc gọi stack chứ không phải là dòng đầu tiên của thông điệp đầu ra.

Cuối cùng, điều này không ảnh hưởng đến kết quả tóm tắt cho biết thành công hay thất bại của nỗ lực định cấu hình.

+0

Tuyệt! Vì vậy, bạn có thể làm bất kỳ loại tin nhắn bạn muốn sau đó huh? – alexmherrmann

+0

Có cách nào để dừng công cụ ngăn xếp cuộc gọi đó không? Cảm ơn câu trả lời! – alexmherrmann

+0

@alexhairyman Không thực sự, nhưng bạn cần nó để theo dõi nguồn thực tế của lỗi/cảnh báo. Nếu bạn không muốn thấy ngay cả lỗi/cảnh báo, bạn luôn có thể loại bỏ mọi thứ bên trong phần tử 'function' để' message' trở thành no-op. Hoặc chỉ để lại các loại lỗi trong 'if' và bỏ qua các cảnh báo. – Fraser

3

Theo cmake 3.1, thiết lập CMAKE_INSTALL_MESSAGE cũng rất hữu ích. Ví dụ: set(CMAKE_INSTALL_MESSAGE LAZY) sẽ bỏ qua các thông báo -- Up-to-date:.

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