2012-01-25 29 views
8

Có cách nào tôi chỉ có thể thực thi phụ thuộc giả mạo của tệp nếu tệp này không tồn tại không?Makefile thực thi các mục tiêu của một tệp chỉ khi tệp không tồn tại

Nếu tệp không có phụ thuộc giả mạo, nó hoạt động và chỉ thực thi nội dung của quy tắc này. Nhưng nếu tôi thêm một mục tiêu giả mạo là phụ thuộc, nó sẽ tiếp tục thực hiện quy tắc phụ thuộc và quy tắc tạo tệp hiện có.

tôi đơn giản hóa Makefile của tôi vì vậy bạn có thể thấy vấn đề của tôi:


.PHONY: phonytarget all clean 

all: $(CURDIR)/a.a 
    @echo done 

$(CURDIR)/a.a: phonytarget 
    @touch [email protected] 

phonytarget: 
    @echo what the heck is wrong with you 

Trả lời

7

Sử dụng order-only prerequisites:

đôi khi, tuy nhiên, bạn có một tình huống mà bạn muốn áp đặt một trật tự cụ thể về các quy tắc được gọi mà không buộc phải cập nhật đích nếu một trong các quy tắc đó được thực thi. Trong trường hợp đó, bạn muốn xác định các điều kiện tiên quyết chỉ có thứ tự. Điều kiện tiên quyết chỉ có thể được chỉ định bằng cách đặt một biểu tượng ống (|) trong danh sách điều kiện tiên quyết: bất kỳ điều kiện tiên quyết bên trái của biểu tượng đường ống là bình thường; bất kỳ điều kiện tiên quyết nào ở bên phải đều chỉ là đơn đặt hàng:

targets : normal-prerequisites | order-only-prerequisites 

Phần điều kiện tiên quyết bình thường có thể trống. Ngoài ra, bạn vẫn có thể khai báo nhiều dòng điều kiện tiên quyết cho cùng một đích: chúng được nối thêm một cách thích hợp (các điều kiện tiên quyết thông thường được nối vào danh sách các điều kiện tiên quyết bình thường; điều kiện tiên quyết chỉ được thêm vào danh sách điều kiện tiên quyết chỉ có thứ tự).

.PHONY: phonytarget all clean 

all: $(CURDIR)/a.a 
    @echo done 

$(CURDIR)/a.a: | phonytarget 
    @touch [email protected] 

phonytarget: 
    @echo what the hack is wrong with you 
Các vấn đề liên quan