Makefile - Chỉ thị

Có rất nhiều chỉ thị có sẵn dưới nhiều hình thức khác nhau. Cácmakechương trình trên hệ thống của bạn có thể không hỗ trợ tất cả các chỉ thị. Vì vậy, hãy kiểm tra xemmake hỗ trợ các chỉ thị mà chúng tôi đang giải thích ở đây. GNU make hỗ trợ các chỉ thị này.

Chỉ thị có điều kiện

Các chỉ thị có điều kiện là -

  • Các ifeqchỉ thị bắt đầu điều kiện và chỉ định điều kiện. Nó chứa hai đối số, được phân tách bằng dấu phẩy và được bao quanh bởi dấu ngoặc đơn. Việc thay thế biến được thực hiện trên cả hai đối số và sau đó chúng được so sánh. Các dòng của makefile theo sau ifeq được tuân theo nếu hai đối số khớp nhau; nếu không thì chúng bị bỏ qua.

  • Các ifneqchỉ thị bắt đầu điều kiện và chỉ định điều kiện. Nó chứa hai đối số, được phân tách bằng dấu phẩy và được bao quanh bởi dấu ngoặc đơn. Việc thay thế biến được thực hiện trên cả hai đối số và sau đó chúng được so sánh. Các dòng của makefile theo sau ifneq được tuân theo nếu hai đối số không khớp; nếu không thì chúng bị bỏ qua.

  • Các ifdefchỉ thị bắt đầu điều kiện và chỉ định điều kiện. Nó chứa một đối số duy nhất. Nếu đối số đã cho là đúng thì điều kiện trở thành đúng.

  • Các ifndefchỉ thị bắt đầu điều kiện và chỉ định điều kiện. Nó chứa một đối số duy nhất. Nếu đối số đã cho là sai thì điều kiện trở thành đúng.

  • Các elseLệnh làm cho các dòng sau được tuân theo nếu điều kiện trước đó không thành công. Trong ví dụ trên, điều này có nghĩa là lệnh liên kết thay thế thứ hai được sử dụng bất cứ khi nào lệnh thay thế đầu tiên không được sử dụng. Nó là tùy chọn để có một khác trong một điều kiện.

  • Các endifchỉ thị kết thúc điều kiện. Mọi điều kiện phải kết thúc bằng endif.

Cú pháp của chỉ thị điều kiện

Cú pháp của một điều kiện đơn giản không có điều kiện khác như sau:

conditional-directive
   text-if-true
endif

Text-if-true có thể là bất kỳ dòng văn bản nào, được coi là một phần của makefile nếu điều kiện là true. Nếu điều kiện sai, không có văn bản nào được sử dụng thay thế.

Cú pháp của một điều kiện phức tạp như sau:

conditional-directive
   text-if-true
else
   text-if-false
endif

Nếu điều kiện là đúng, text-if-true được sử dụng; nếu không, văn bản-nếu-sai được sử dụng. Văn bản-nếu-sai có thể là bất kỳ số dòng văn bản nào.

Cú pháp của chỉ thị điều kiện giống nhau cho dù điều kiện đơn giản hay phức tạp. Có bốn chỉ thị khác nhau kiểm tra các điều kiện khác nhau. Chúng như đã cho -

ifeq (arg1, arg2)
ifeq 'arg1' 'arg2'
ifeq "arg1" "arg2"
ifeq "arg1" 'arg2'
ifeq 'arg1' "arg2"

Các chỉ thị trái ngược của các điều kiện trên như sau:

ifneq (arg1, arg2)
ifneq 'arg1' 'arg2'
ifneq "arg1" "arg2"
ifneq "arg1" 'arg2'
ifneq 'arg1' "arg2"

Ví dụ về chỉ thị có điều kiện

libs_for_gcc = -lgnu
normal_libs =

foo: $(objects)
ifeq ($(CC),gcc)
   $(CC) -o foo $(objects) $(libs_for_gcc)
else
   $(CC) -o foo $(objects) $(normal_libs)
endif

Chỉ thị bao gồm

Các include directive cho phép makeđể tạm ngừng đọc makefile hiện tại và đọc một hoặc nhiều makefile khác trước khi tiếp tục. Chỉ thị là một dòng trong makefile trông như sau:

include filenames...

Tên tệp có thể chứa các mẫu tên tệp trình bao. Khoảng trắng thừa được cho phép và bỏ qua ở đầu dòng, nhưng không cho phép một tab. Ví dụ: nếu bạn có ba tệp `.mk ', đó là` `a.mk',` b.mk ', và `c.mk', và $ (bar) thì nó sẽ mở rộng thành bish bash và sau đó là biểu hiện.

include foo *.mk $(bar)

is equivalent to:

include foo a.mk b.mk c.mk bish bash

Khi mà makexử lý một chỉ thị bao gồm, nó tạm ngừng đọc makefile và lần lượt đọc từ từng tệp được liệt kê. Khi điều đó kết thúc,make tiếp tục đọc makefile trong đó chỉ thị xuất hiện.

Chỉ thị ghi đè

Nếu một biến đã được đặt bằng một đối số lệnh, thì các phép gán thông thường trong makefile sẽ bị bỏ qua. Nếu bạn muốn đặt biến trong makefile mặc dù nó đã được đặt bằng đối số lệnh, bạn có thể sử dụng chỉ thị ghi đè, là một dòng có dạng như sau−

override variable = value

or

override variable := value