2011-12-21 35 views
16

Tôi đang sử dụng CMake để xây dựng các dự án của mình trên Windows (Visual Studio) cũng như trên các máy Linux (gcc). Tôi muốn đánh dấu một số mã như "chỉ gỡ rối", giống như với#ifdef DEBUG với CMake độc ​​lập khỏi nền tảng

#ifdef DEBUG 
//some logging here 
#endif 

Câu hỏi là: những gì định nghĩa biên dịch có sẵn trên tất cả các nền tảng trong CMake "Debug" xây dựng loại? DEBUG dường như không tồn tại. (Tôi muốn có đăng nhập hoặc bất cứ điều gì chỉ khi loại xây dựng là Gỡ lỗi.)

+0

http://stackoverflow.com/a/7725055/560648 –

Trả lời

13

Tôi khuyên bạn nên thêm kiểu của riêng mình. Biểu tượng cmake CMAKE_C_FLAGS_DEBUG có thể chứa cờ chỉ được sử dụng trong chế độ gỡ lỗi. Ví dụ:

set(CMAKE_C_FLAGS_DEBUG "-DMY_DEBUG") 

(Có lẽ, bạn sẽ phải sử dụng "/DMY_DEBUG" cho visual studio.)

+0

Tôi bị cám dỗ để upvote bạn cho tên người dùng của bạn, nhưng thay vào đó tôi đã downvoted vì tôi không phải là một fan hâm mộ của làm lại công việc đã được thực hiện cho bạn bởi các công cụ của bạn, và theo câu trả lời khác, 'NDEBUG' được định nghĩa bởi CMake, vì vậy nó thích hợp hơn. –

+2

'NDEBUG' là một ký hiệu được định nghĩa bởi chuẩn C để kiểm soát liệu' assert() ': s có nên hoạt động hay không. Cá nhân, tôi không nghĩ bạn nên sử dụng nó cho bất cứ điều gì khác. (Cảm ơn lời khen về tên người dùng.) – Lindydancer

+0

Tôi cũng đang sử dụng 'NDEBUG'. FWIW, cách thích hợp để thêm các định nghĩa macro (bây giờ, ít nhất) là 'add_definitions (-DMY_DEBUG)'. [Documentation] (http://www.cmake.org/cmake/help/v3.0/command/add_definitions.html) gợi ý rằng nó nhận ra '-' hoặc'/'làm tiền tố, vì vậy nó nên là hệ điều hành bất khả tri. –

61

CMake thêm -DNDEBUG đến CMAKE_C_FLAGS_ {CHÍ, MINSIZEREL} theo mặc định. Vì vậy, bạn có thể sử dụng #ifndef NDEBUG.

+7

Âm kép là khó chịu :) – entheh

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