xem xét như sau:Làm thế nào để bao gồm đường dẫn tiền tố trong GNU Make Mẫu quy tắc
%.foo: %.bar
echo $< > [email protected]
Giả sử chúng ta có một tập tin 1.bar
, lệnh thực thi đơn giản echo 1.bar > 1.foo
là. Tuy nhiên, khi %
chứa đường dẫn, thay vì chỉ là tên tệp, nó bắt đầu trở nên khó tính. Vấn đề của tôi là tôi muốn thêm một đường dẫn khác vào %.bar
, hình mẫu trở nên hoàn toàn bị xáo trộn. Ví dụ, khi %.bar
là nice/path/1.bar
, điều này trở nên bất khả thi:
%.foo: /project/something/%.bar
echo $< > [email protected]
này sẽ chạy, nhưng nó thực thi echo nice/path//project/something/1.bar > 1.foo
thay cho echo /project/something/nice/path1.bar > 1.foo
Lý do cho điều này là trong cách làm không quy mô của nó. Từ tài liệu:
Khi mẫu đích không chứa dấu gạch chéo (và thường thì không), tên thư mục trong tên tệp được xóa khỏi tên tệp trước khi được so sánh với tiền tố và hậu tố đích. [...] Các thư mục được bỏ qua chỉ với mục đích tìm kiếm một quy tắc ngầm để sử dụng, không phải trong việc áp dụng quy tắc đó. Do đó, ‘e% t’ khớp với tên tệp src/eat, với ‘src/a’ làm gốc. Khi điều kiện tiên quyết được chuyển thành tên tệp, các thư mục từ thân cây được thêm ở phía trước, trong khi phần còn lại của thân cây được thay thế cho ‘%’. Gốc ‘src/a’ có mẫu tiền đề ‘c% r’ cung cấp tên tệp là src/car
Có cách nào để tắt quy tắc này cho một quy tắc cụ thể không?
Bạn chỉ cần cố gắng sử dụng tên tập tin để trần trong công thức? Nếu vậy chỉ cần sử dụng '$ (notdir $ <)' hoặc '$ (
Câu hỏi của bạn không làm cho tình hình rõ ràng. Nếu bạn đã viết quy tắc này như một quy tắc rõ ràng, nó sẽ trông như thế nào? Đường dẫn đích mở rộng mà bạn muốn là gì và đường dẫn tiên quyết mở rộng bạn muốn là gì? – MadScientist
Đường dẫn tiên quyết mở rộng phải là '/ project/something/nice/path1.bar'. Nó làm cho 'nice/path // project/something/1.bar'. Tức là, nó chia tách '%' trong một tiền tố ('nice/path') và một gốc (' 1.bar'), sau đó prepends '/ project/something /' vào gốc, và THEN sẽ thêm tiền tố vào đó. Tôi muốn nó ngừng tách '%' trong một tiền tố và gốc. – Gx1sptDTDa