Tôi đang cố gắng viết một GNU tạo Makefile có tải trọng các mục tiêu tương tự, trong đó các lệnh xây dựng hơi khác nhau giữa chúng. Tôi đang cố gắng sử dụng target-specific variables để trình bày các biến thể này. Một số giá trị biến này đề cập đến các tệp mà tôi muốn sử dụng làm điều kiện tiên quyết. Ví dụ:Biến mục tiêu cụ thể là Điều kiện tiên quyết trong Makefile
target_1:special_filename=target1_prereq
target_2:special_filename=target2_prereq
target_1 target_2: common_filename $(special_filename)
do_something common_filename --a-weird-option=$(special_filename)
Khi tôi gọi 'make target_1', tôi muốn làm cho target1_prereq nếu nó không tồn tại. Tại thời điểm này, nó dường như không sử dụng target1_prereq như một điều kiện tiên quyết, mặc dù lệnh build (do_something) được gọi với tham số đúng.
Tôi đang sử dụng GNU Tạo 3,80.
Chỉnh sửa: Một vài biến chứng khác từ hệ thống thực. Một số biến là bản thân dựa trên giá trị của các biến khác. Chỉ định thủ công các điều kiện tiên quyết sẽ không mở rộng quy mô. Một ví dụ hơi phức tạp hơn:
target_1:special_filename_base=target1_prereq
target_2:special_filename_base=target2_prereq
some_filename_a = $(special_filename_base).exta
some_filename_b = $(special_filename_base).extb
target_1 target_2: common_filename $(special_filename_b) $(special_filename_a)
do_something common_filename --a-weird-option=$(special_filename_a) --second=$(special_filename_b)
Phục hồi chủ đề này vì lợi ích của bất kỳ ai khác tình cờ gặp nó. Một [giải pháp thanh lịch hơn] (http://stackoverflow.com/questions/9311743/make-using-target-specific-variables-in-prerequisites) sử dụng mở rộng thứ cấp. – Seth
@Seth, tôi đồng ý: 'target_1 target_2: common_filename $$ (special_filename_base) .exta $$ (special_filename_base) .extb ...' – Beta