2010-03-13 39 views
11

Tôi bắt đầu tìm hiểu về makefiles. Nhìn vào đầu ra, tôi thấy rất nhiều lần xuất hiện:Ý nghĩa của -DHAVE_CONFIG_H trong makefiles

g++ -DHAVE_CONFIG_H -I ... 

chính xác là -DHAVE_CONFIG_H? Chức năng của tùy chọn biên dịch này là gì?

Trả lời

20

Tất cả những gì -DHAVE_CONFIG_H làm là xác định mã thông báo tiền xử lý HAVE_CONFIG_H chính xác như khi bạn có #define HAVE_CONFIG_H ngay tại đầu mỗi tệp nguồn của bạn.

Đối với những gì nó được sử dụng cho, điều đó phụ thuộc hoàn toàn vào phần còn lại của tệp nguồn của bạn (và tất cả mọi thứ mà nó cũng bao gồm). Đó là nơi bạn nên tìm kiếm để làm việc hiệu quả của nó.

trông giống như nó có thể có nghĩa là một tập tin header config.h có sẵn và nên được bao gồm, trong trường hợp này có thể bạn sẽ tìm ra trình tự sau đây đâu đó trong bạn file nguồn:

#ifdef HAVE_CONFIG_H 
    #include "config.h" 
#endif 

mà sẽ bao gồm tệp tiêu đề khi bạn nói nó có sẵn. Tuy nhiên đó là giả định trên một phần của tôi và không có nghĩa là hiệu ứng chính xác, chỉ cần những gì I sẽ sử dụng một biểu tượng tiền xử lý cho.

+0

nhưng cách này, "DEFS" có ý nghĩa gì trong Makefile? cảm ơn – flow

+0

@Werner, phụ thuộc vào ngữ cảnh. Nếu đó là "DEFS = -c -O2", đó chỉ là xác định một sự thay thế có thể được sử dụng sau này để, ví dụ, "gcc $ (DEFS) blah blah" trở thành "gcc -c -O2 blah blah". – paxdiablo