Hãy Hỗ Trợ Việc Biên Dịch Tệp Fx Cho Bjam
Từ lúc dự án mới bắt đầu, chúng tôi đã quyết định từ bỏ môi trường IDE Visual C++ để chuyển sang sử dụng công cụ build phù hợp hơn. Quá trình lựa chọn này đã tiêu tốn không ít thời gian và công sức của cả đội. Ban đầu chúng tôi thử dùng Makefile - công cụ phổ biến lúc bấy giờ, nhưng càng dùng càng thấy phức tạp, đặc biệt không phù hợp với đặc thù dự án của chúng tôi. Sau đó chuyển sang dùng Jam (trong quá trình này cũng từng thử nghiệm Apache Ant và vài công cụ khác nhưng không đi đến kết quả), dù phải dành nhiều thời gian học cách sử dụng do cú pháp hoàn toàn khác biệt so với ngôn ngữ C quen thuộc. Khi vừa mới làm quen được chút đỉnh thì đồng nghiệp lại đề xuất thử nghiệm bjam - lúc này mới vỡ lẽ vì sao cộng đồng Boost lại “đỉnh” đến vậy, họ đã biến cái công cụ nhỏ xinh Jam thành một hệ thống xây dựng vô cùng mạnh mẽ.
Việc mở rộng chức năng trên nền bjam tuy nghe qua tưởng đơn giản nhưng thực tế không hề dễ dàng. Dù việc viết code mở rộng không yêu cầu nhiều, nhưng để hiểu thấu đáo nguyên lý vận hành của hệ thống script bjam lại là chuyện không hề đơn giản. Tôi nhận thấy tư duy thiết kế của Jam hoàn toàn khác biệt so với lập trình C truyền thống, chính điều này khiến các lập trình viên thường xuyên gặp lỗi khi viết script Jam. Nếu không phải như vậy thì tại sao Boost Build (dựa trên bjam) lại tồn tại trong tình trạng chưa ổn định suốt thời gian dài?
Trong trường hợp cụ thể hiện tại, tôi cần tích hợp công cụ biên dịch bên ngoài fxc.exe để xử lý các file .fx thành file nhị phân .fxo đầu ra - công cụ quen thuộc với các lập trình viên 3D. Dưới đây là đoạn script Jam tôi đã xây dựng, biết đâu sẽ hữu ích với ai đó cũng đang sử dụng bjam:
—-fx.jam——– import type ; import generators ; import scanner ;
type.register FX : fx ; type.register FXO : fxo ;
type.set-scanner FX : c-scanner ;
generators.register-standard fx.inline-file : FX : FXO ;
actions inline-file { fxc /nologo /T fx_2_0 /Fo $(<) $(>) }
Để sử dụng, chỉ cần thêm lệnh import fx ; vào file project-root.jam là có thể sử dụng ngay lập tức.