2012-07-09 32 views
30

Đoạn Mã:Giá trị của CXX trong một makefile đến từ đâu?

target_test : test.cc 
    $(CXX) $(CPPFLAGS) $(CFLAGS) test.cc 

Tôi biết rằng CXX là một biến (chứa các lệnh biên dịch để gọi), nhưng tôi đã tự hỏi nơi biến này đến từ đâu. Biến không được định nghĩa trong makefile và không phải là một biến môi trường. Bất cứ ai có thể giải thích giá trị của CXX đến từ đâu?

Trả lời

29

Make có một số predefined variables trong đó là CC. Ban đầu, nó được thiết lập tại cc mà là một liên kết tượng trưng để trình biên dịch C được cài đặt:

$ readlink -f `which cc` 
/usr/bin/gcc-4.6 

Ngoài ra:

$ readlink -f `which c++` 
/usr/bin/g++-4.6 

Bạn có thể thay đổi nó nếu bạn muốn.

Bạn có thể sử dụng make -p -f /dev/null để nhận danh sách tất cả các quy tắc và biến tiềm ẩn. Tôi không thể hiển thị đầu ra ngay bây giờ vì tôi có cài đặt không chuẩn và đầu ra không phải bằng tiếng Anh. Ví dụ:

+3

: $ make -p -f/dev/null | grep CXX cung cấp: CXX = g ++ – ady

15

CXX là một biến tiềm ẩn trong GNU. There are others too.

Không chỉ vậy, các biến tiềm ẩn này được sử dụng trong implicit rules.

Dưới đây là một trích liên quan đến cách CXX được sử dụng bởi một quy tắc ngầm:

Biên dịch C++ chương trình
n.o được thực hiện tự động từ n.cc, n.cpp, hoặc n.C với một công thức dạng
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c.
Chúng tôi khuyến khích bạn sử dụng hậu tố '.cc' cho tệp nguồn C++ thay vì ‘.C’.

1

Bất cứ ai có thể giải thích được giá trị của CXX từ đâu?

Giống như khác variabes “ma thuật” (LD, RM, MAKE), nó được xác định trước trong nội bộ bằng cách làm.

0

Đây là một biến mà người dùng có thể ghi đè và có giá trị mặc định g++ (trong phiên bản GNU Make, ít nhất). Không có gì nhiều hơn với nó (nó không được định nghĩa trong một số tập tin hoặc các công cụ như thế).

Nguồn: The GNU Make Manual

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