我对 GNU makefiles 比较陌生,目前我的工作是,我需要在 makefile 中为项目创建一个目标来编译一堆驱动程序。每个驱动程序已经在自己的构建目录中创建了自己的makefile,并且每个驱动程序需要调用的目标是相同的。IE。对于驱动程序 A 和驱动程序 B,必须调用“make shared”。
我目前的想法是在主 makefile 中定义每个驱动程序的路径,如下所示:
DRIVER_A = $(CURR_DIR)/<path_to_a>/driver
DRIVER_B = $(CURR_DIR)/<path_to_b>/driver
DRIVER_C = $(CURR_DIR)/<path_to_c>/driver
从这里开始,我真正想做的是为每个 DRIVER_A、DRIVER_B 和 DRIVER_C 调用相同的过程,即:
source <some_compiler>; \
cp -r <some_folder> DRIVER_A/source/; \
cd DRIVER_A/build; \
make shared <some_flags>; \
make so_test <some_flags>
因此,为了实现这一点,我尝试将 DRIVER_A、DRIVER_B 和 DRIVER_C 放入一个对象中,例如
DRIVER_SOURCES := \
DRIVER_A\
DRIVER_B \
DRIVER_C
然后在 DRIVER_SOURCES 上调用目标
drivers_sw: ${DRIVER_SOURCES}
source <some_compiler>; \
cp -r <some_folder> $@/source/; \
cd $@/build; \
make shared <some_flags>; \
make so_test <some_flags>
但这不起作用,因为没有规则为 DRIVER_A、DRIVER_B 和 DRIVER_C 制定目标,这在事后看来对我来说是有意义的,但是我不知道另一种方法来完成我想要完成的事情。
我也愿意为每个驱动程序调用 make 的更好方法,而不是 cd'ing 到它的目录并调用 make,我确信有一种更清洁的方法,但我只是马上开始使用功能。
任何帮助都会很棒,如果需要更多信息,请告诉我,如果我遗漏了什么,我深表歉意,我对在堆栈溢出上发帖还很陌生。
编辑:我在第 4 个代码块中打错字,将“DRIVER_A”替换为 $@