trong kernel MakefileMakefile lỗi quy tắc: *** hỗn hợp tiềm ẩn và bình thường quy tắc
# Modules
/%/: prepare scripts FORCE
$(cmd_crmodverdir)
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
$(build)=$(build-dir)
%.ko: prepare scripts FORCE
$(cmd_crmodverdir)
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
$(build)=$(build-dir) $(@:.ko=.o)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
gây ra lỗi quy tắc ngầm và bình thường hỗn hợp Makefile. (đến chuỗi đầu tiên trên mã được cung cấp)
Tôi nghĩ có điều gì đó sai với cú pháp /%/, làm cách nào để sửa chữa?
cho đến nay tôi đang suy nghĩ về tách quy tắc theo cách này:
# Modules
/: prepare scripts FORCE
$(cmd_crmodverdir)
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
$(build)=$(build-dir)
%/: prepare scripts FORCE
$(cmd_crmodverdir)
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
$(build)=$(build-dir)
%.ko: prepare scripts FORCE
$(cmd_crmodverdir)
$(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \
$(build)=$(build-dir) $(@:.ko=.o)
$(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost
Nhưng nó khó hiểu đối với tôi.
Tốt nhưng giải pháp của tôi có chính xác không? Theo như tôi hiểu tôi cần phải tách nó theo cách này nhưng chạy cùng làm cho 2 lần là trông kỳ lạ đối với tôi. – Cynede
Có; sự tách biệt sẽ là cần thiết. Có, viết ra các quy tắc tương tự hai lần không phải là tuyệt vời. Có thể tạo macro cho các hành động và sau đó sử dụng macro đó trong các quy tắc. 'DIRECTORY_BUILD_RULES = $ (cmd_crmodverdir); $ (Q) $ (MAKE) KBUILD_MODULES = $ (nếu $ (CONFIG_MODULES), 1) $ (build) = $ (build-dir) ', sau đó:' /: chuẩn bị tập lệnh FORCE; $ (DIRECTORY_BUILD_RULES) 'và'% s: chuẩn bị tập lệnh FORCE; $ (DIRECTORY_BUILD_RULES) '. Bạn thậm chí có thể làm cho danh sách phụ thuộc vào macro khác ... –
bây giờ nó nói: Biến đệ quy 'DIRECTORY_BUILD_RULES 'tham chiếu chính nó (cuối cùng). Dừng lại. – Cynede