Xác định quy tắc trong Makefile

Bây giờ chúng ta sẽ tìm hiểu các quy tắc cho Makefile.

Cú pháp chung của quy tắc đích Makefile là:

target [target...] : [dependent ....]
[ command ...]

Trong đoạn mã trên, các đối số trong ngoặc là tùy chọn và dấu chấm lửng có nghĩa là một hoặc nhiều. Ở đây, lưu ý rằng tab để nói đầu mỗi lệnh là bắt buộc.

Một ví dụ đơn giản được đưa ra bên dưới, nơi bạn xác định một quy tắc để làm cho mục tiêu của bạn chào từ ba tệp khác.

hello: main.o factorial.o hello.o
   $(CC) main.o factorial.o hello.o -o hello

NOTE - Trong ví dụ này, bạn sẽ phải đưa ra các quy tắc để tạo tất cả các tệp đối tượng từ các tệp nguồn.

Ngữ nghĩa rất đơn giản. Khi bạn nói "tạo mục tiêu",maketìm quy tắc đích áp dụng; và, nếu bất kỳ người phụ thuộc nào mới hơn mục tiêu,makethực hiện từng lệnh một (sau khi thay thế macro). Nếu bất kỳ phụ thuộc nào phải được thực hiện, điều đó xảy ra đầu tiên (vì vậy bạn có một đệ quy).

Makechấm dứt nếu bất kỳ lệnh nào trả về trạng thái lỗi. Quy tắc sau sẽ được hiển thị trong trường hợp như vậy:

clean:
   -rm *.o *~ core paper

Makebỏ qua trạng thái trả về trên các dòng lệnh bắt đầu bằng dấu gạch ngang. Ví dụ, ai quan tâm nếu không có tệp lõi?

Makelặp lại các lệnh, sau khi thay thế macro để cho bạn biết điều gì đang xảy ra. Đôi khi bạn có thể muốn tắt nó đi. Ví dụ -

install:
   @echo You must be root to install

Mọi người đã mong đợi một số mục tiêu nhất định trong Makefiles. Bạn luôn nên duyệt trước. Tuy nhiên, điều hợp lý là phải tìm thấy tất cả (hoặc chỉ tạo), cài đặt và dọn dẹp.

  • make all - Nó biên dịch mọi thứ để bạn có thể kiểm tra cục bộ trước khi cài đặt ứng dụng.

  • make install - Nó cài đặt các ứng dụng ở đúng nơi.

  • make clean - Nó làm sạch các ứng dụng, loại bỏ các tệp thực thi, bất kỳ tệp tạm thời nào, tệp đối tượng, v.v.

Quy tắc ngầm định của Makefile

Lệnh này phải hoạt động trong mọi trường hợp khi chúng ta xây dựng một x thực thi từ mã nguồn x.cpp. Điều này có thể được phát biểu như một quy tắc ngầm -

.cpp:
   $(CC) $(CFLAGS) [email protected] $(LDFLAGS) -o $@

Quy tắc ngầm này cho biết cách tạo x ra khỏi xc - chạy cc trên xc và gọi đầu ra là x. Quy tắc này là ngầm vì không có mục tiêu cụ thể nào được đề cập. Nó có thể được sử dụng trong mọi trường hợp.

Một quy tắc ngầm phổ biến khác là xây dựng tệp .o (đối tượng) ngoài .cpp (tệp nguồn).

.cpp.o:
   $(CC) $(CFLAGS) -c $<

alternatively

.cpp.o:
   $(CC) $(CFLAGS) -c $*.cpp