2012-04-26 12 views
13

Tôi đang tìm kiếm tại một CFLAGS của -Cờ g ++ -D làm gì?

CFLAGS=-g -w -D LINUX -O3 -fpermissive 

trong một Makefile. Lá cờ -D làm gì? Tôi thấy trên trang người đàn ông rằng

-D name 
    Predefine name as a macro, with definition 1. 

nhưng tôi không biết cách diễn giải điều đó. Giải thích của tôi là ... nó làm cho LINUX một vĩ mô và chỉ làm -03 và -fpermissive khi trong một môi trường Linux. Có đúng không? Nếu không, thì sao? Cảm ơn bạn đã giúp đỡ

+3

Thông thường, '-D' được dán vào tên (được xác định) sau, ví dụ: '-DLINUX' hoặc' -DFOO = BAR' –

Trả lời

19

Điều này tương đương với việc thêm tuyên bố #define LINUX 1 vào mã nguồn của tệp đang được biên dịch. Nó không có bất kỳ ảnh hưởng nào trên các cờ biên dịch khác. Lý do cho việc này là cách dễ dàng để bật các câu lệnh #ifdef trong mã. Vì vậy, bạn có thể có mã cho biết:

#ifdef LINUX 
    foo; 
#endif 

Nó sẽ chỉ được bật nếu macro đó được bật mà bạn có thể kiểm soát với cờ -D. Vì vậy, đây là cách dễ dàng để bật/tắt các câu lệnh biên dịch có điều kiện tại thời gian biên dịch mà không cần chỉnh sửa tệp nguồn.

+0

Tôi sẽ +1, nhưng việc giải thích chỉ chính xác đến một điểm. Cờ '-D' không ảnh hưởng đến các cờ sau (ví dụ: làm cho chúng có điều kiện hoặc một số cuộc nói chuyện điên rồ như vậy), và đó là một sự khác biệt khá quan trọng. – jpm

+0

@ jpm đó là một điểm tốt tôi đã không giải thích các câu hỏi theo cách đó khi tôi lần đầu tiên đọc nó, nhưng bây giờ tôi thấy bạn là chính xác. Tôi đã chỉnh sửa câu trả lời của mình để làm rõ điểm đó. –

3

Nó không liên quan gì đến -O3. Về cơ bản, nó có nghĩa là giống như

#define LINUX 1 

ở đầu tệp được biên dịch.

+0

Vì vậy, những gì hiện -03 sau đó? – Sterling

+1

'-O3' đặt mức tối ưu hóa của trình biên dịch thành 3. – jpm