2016-10-08 28 views
10

Tôi đang sử dụng thư viện có ứng dụng mẫu. Các makefile mẫu chứa $< trong các đối số:

all:test.cpp 
    g++ -Wl,--no-as-needed -o Example $< 
clean: 
    rm -f SampleApp11 

Tôi đã nhìn này lên và tutorialspoint nói rằng

$ < tên của tập tin có liên quan đã gây ra hành động.

Một website bang rằng:

đây là một quy tắc thay thế hậu tố để xây dựng của .o từ .c của nó sử dụng các biến tự động $ <: tên của điều kiện tiên quyết của quy tắc (a. c tệp) và $ @: tên của mục tiêu của quy tắc (tệp .o) (xem gnu làm cho phần hướng dẫn về biến tự động) .co: $ (CC) $ (CFLAGS) $ (BAO GỒM) -c $ < -o $ @

Tôi vẫn còn bối rối, điều này có nghĩa là gì?

+0

Trong ví dụ của bạn, tệp phụ thuộc ** đầu tiên ** sau tệp 'all:' target - 'test.cpp'. – Galik

+0

Ahh, vì vậy '<$' cho g ++ tập tin nào cần biên dịch, đúng không? –

+12

Lưu ý rằng điều này không liên quan gì đến g ++. Nó làm cho thay thế này trước khi gọi g ++. g ++ không bao giờ thấy '$ <'. Nếu nó đã làm, nó sẽ coi nó như là một tên tập tin, và có khả năng phát hành một thông báo lỗi về không có tập tin bằng tên đó được tìm thấy. – hvd

Trả lời

16

Điều này thực sự không liên quan gì đến trình biên dịch, một phần của cú pháp Makefile và được thay thế trước khi trình biên dịch được chạy.

Trong ví dụ của bạn, đó là phụ thuộc đầu tiên (tệp) sau mục tiêu all: - test.cpp.

Chức năng cơ bản của Makefile là tạo ra một mục tiêu nếu một phụ thuộc thay đổi:

target: dependency.cpp 
    rule to create target (using dependency.cpp) 

thường $<đầu vào để trình biên dịch và [email protected]đầu ra.

Nó loại như thể nó là này (không phải là một giá trị Makefile):

[email protected]: $< 
    g++ -o [email protected] $< 

Con đường tôi nhớ họ là @ giống như một mục tiêu (như trong thực hành mục tiêu) và < giống một mũi tên. Vì vậy, tôi tưởng tượng một mũi tên trỏ đến một mục tiêu :

@ <-------- (think "Robin Hood") 

YMMV

9

Đây là một trong GNU make's automatic variables.

Tên của điều kiện tiên quyết đầu tiên. Nếu mục tiêu có công thức của nó từ quy tắc ẩn, đây sẽ là điều kiện tiên quyết đầu tiên được thêm vào theo quy tắc ẩn số (xem Implicit Rules).

Một điều kiện tiên quyết là một tập tin được liệt kê trong rule:

targets : prerequisites 
     recipe 

Ví dụ, trong các nguyên tắc sau các điều kiện tiên quyết đầu tiên là test.c file:

my_executable: test.c precompiled.o 
    g++ -o my_executable $< 

Nó tương đương với những điều sau đây :

my_executable: test.c precompiled.o 
    g++ -o my_executable test.c 

precompiled.o là điều kiện tiên quyết thứ hai (một tệp đối tượng biên dịch sẵn ngụ ý).

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