2015-12-16 17 views
5

CMAKE_BUILD_TYPE=Release ngầm ngụ ý -DNDEBUG?CMAKE_BUILD_TYPE = Phát hành ngụ ý -DNDEBUG?

Nếu không: không phải là hợp lý để mong đợi rằng hàm ý này diễn ra?

Tôi muốn biết nếu sau CMake code đang dư thừa trong tôi CMakeLists.txt:

if (NOT CMAKE_BUILD_TYPE MATCHES Debug) 
    add_definitions(-DNDEBUG) 
endif() 
+0

Tôi đã kiểm tra và hiểu rằng * CMake * gắn thêm cờ '-DNDEBUG', nhưng vẫn có vấn đề vì [Tài liệu CMake] (https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE. html) không ** không ** đề cập rõ ràng nếu cờ '-DNDEBUG' được thêm khi tùy chọn' CMAKE_BUILD_TYPE = Debug' xuất hiện. Tôi thích tránh viết mã dựa trên hành vi không có giấy tờ vì nó có thể thay đổi trong các phiên bản CMake trong tương lai (mặc dù hậu quả tiềm năng sẽ nhỏ). –

+1

Ý của bạn là = trong tiêu đề? Tôi chắc chắn sẽ mong đợi gỡ lỗi xây dựng để ** KHÔNG ** xác định 'NDEBUG'. – immibis

+0

@immibis - cảm ơn. Tất nhiên đó là một lỗi đánh máy. Tôi đã chỉnh sửa câu hỏi của mình. +1 –

Trả lời

1

Vâng, nó được thiết lập bởi CMake. Nhìn thấu mã CMake tiết lộ, rằng đối với một loạt các trình biên dịch nó được thiết lập. Có lẽ họ đặt nó chỉ cho các trình biên dịch, chấp nhận lá cờ này. Đây là một trong những dòng liên quan đến GCC:

Modules/Compiler/GNU.cmake: set(CMAKE_${lang}_FLAGS_RELEASE_INIT "-O3 -DNDEBUG") 

Nhưng lưu ý rằng nhiều dự án sẽ ghi đè cờ phát hành/gỡ lỗi mà không giữ nguyên cài đặt ban đầu và ghi đè định nghĩa của người dùng.

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