GNU Make Xử Lý Vấn Đề Dấu Gạch Chéo
Vấn đề xử lý dấu gạch chéo ngược trong GNU Make
GNU Make có cách xử lý dấu gạch chéo ngược () vô cùng phiền phức. Nếu dùng phương pháp thông thường, bạn gần như không thể tạo ra một dấu \ đơn lẻ.
Ví dụ, nếu bạn viết trực tiếp SLASH = \ thì sẽ không thành công, bởi vì \ được dùng để nối dòng tiếp theo.
Còn khi dùng SLASH = \ thì lại tạo ra hai dấu gạch chéo ngược thay vì một.
Điều này không xảy ra trong BSD Make, nhưng lại là vấn đề đau đầu trong GNU Make, đặc biệt khi bạn đang xây dựng dự án đa nền tảng.
Dù trên Windows, hầu hết các đường dẫn có thể dùng \ thay thế cho , nhưng trong một số trường hợp đặc biệt - nhất là khi xử lý các mẫu phức tạp - lỗi vẫn có thể phát sinh.
Hôm nay mình quyết tâm tìm hiểu kỹ vấn đề này và cuối cùng đã tìm được cách giải quyết qua công cụ tìm kiếm.
Phương pháp “đi đường vòng” để tạo ra một dấu \ đơn lẻ như sau:
SLASH := $(strip \)
Thậm chí còn có cách tinh tế hơn trong GNU Make:
/ := $(strip \)
Với cách định nghĩa này, bạn có thể dùng $/ để sinh ra một ký tự phân cách đường dẫn, thay vì phải dùng $(SLASH) như cách thông thường.
Tham khảo: GNU Make path handling