Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile make文件中的通配符用法_Makefile - Fatal编程技术网

Makefile make文件中的通配符用法

Makefile make文件中的通配符用法,makefile,Makefile,我目前有一个基于最初自动生成的makefile的构建系统。随着时间的推移,我对各种功能做了一些更改。项目中的每个子目录都有一个单独的makefile(subdr.mk)。但是,subdr.mk的每个实例都会显式列出该子目录中的文件。我想修改这些文件,以便对目录中的所有文件进行通配符构建,这样在添加新文件时就不必更新这些文件。我在下面复制了一个当前文件。关于如何(或是否)修改这些文件以进行通配符生成,有什么建议吗?我不是一个制造专家(尽管如果我完成了当前的项目,我想成为一个)。谢谢 #######

我目前有一个基于最初自动生成的makefile的构建系统。随着时间的推移,我对各种功能做了一些更改。项目中的每个子目录都有一个单独的makefile(subdr.mk)。但是,subdr.mk的每个实例都会显式列出该子目录中的文件。我想修改这些文件,以便对目录中的所有文件进行通配符构建,这样在添加新文件时就不必更新这些文件。我在下面复制了一个当前文件。关于如何(或是否)修改这些文件以进行通配符生成,有什么建议吗?我不是一个制造专家(尽管如果我完成了当前的项目,我想成为一个)。谢谢

################################################################################
#自动生成的文件。不要编辑!
################################################################################
#将这些工具调用的输入和输出添加到构建变量中
C_SRCS+=\
../Src/Tasks/BankWriteTask.c\
../Src/Tasks/CommTask.c\
../Src/Tasks/SrvTask.c\
../Src/Tasks/WatchdogTask.c
OBJS+=\
./Src/Tasks/BankWriteTask.o\
/Src/Tasks/CommTask.o\
/Src/Tasks/SrvTask.o\
/Src/Tasks/WatchdogTask.o
C_DEPS+=\
./Src/Tasks/BankWriteTask.d\
/Src/Tasks/CommTask.d\
/Src/Tasks/SrvTask.d\
/Src/Tasks/WatchdogTask.d
#每个子目录都必须提供用于构建其贡献的源的规则
Src/Tasks/%.o:../Src/Tasks/%.c

arm ATOLICAL eabi gcc-c-mthumb-mcpu=cortex-m3-std=gnu11-D_uuuu弱=uuu属性(弱))-D_u压缩=u属性(压缩)-DUSE_HAL_DRIVER-DSTM32L152xE-DCONFIG_DEBUG-DCONFIG_RELEASE=1-I..\Config-I..\Inc-I..\Inc\Sys-I..\Inc\stmal-I..\Inc\DRIVER-I..\Inc\Business-I..\Inc\Tasks-I..\Drivers\CMSIS\Include\ST\stm32l1x\Include\Include-I..\Drivers\stm32l1x-I..\Middleware\Third\u Party\FreeRTOS\Source\include-I..\Middleware\Third\u RTOS\I..\Middleware\Third\u Party\FreeRTOS\Source\portable\GCC\ARM\U CM3-I..\Middleware\Third\u Party\FreeRTOS Plus\Source\FreeRTOS Plus CLI-I..\Middleware\ST\STM32\U Cryptographic\Inc-I..\Middleware\ST\STM32\STMU Cryptographic\Inc\哈希\SHA256-I..\middleware\Third\u Party\TraceRecorder\include-I..\middleware\Third\u Party\TraceRecorder\include-I..\middleware\TraceRecorder\TraceRecorder\include-I../stm32l1x\u-HAL\u-Driver/Inc-O0-f功能部分-fdata部分-g-fstack用法-Wall-MMD-MP-MF“$(@:%.o=%.d)”-MT“$”(@)”-specs=nano.specs-o“$@”$首先请注意,这些文件列表中存在大量冗余:

C_SRCS += \
../Src/Tasks/BankWriteTask.c \
../Src/Tasks/CommTask.c \
../Src/Tasks/SrvTask.c \
../Src/Tasks/WatchdogTask.c 

OBJS += \
./Src/Tasks/BankWriteTask.o \
./Src/Tasks/CommTask.o \
./Src/Tasks/SrvTask.o \
./Src/Tasks/WatchdogTask.o 

C_DEPS += \
./Src/Tasks/BankWriteTask.d \
./Src/Tasks/CommTask.d \
./Src/Tasks/SrvTask.d \
./Src/Tasks/WatchdogTask.d 
您可以使用Make功能减少:

如果
C_SRCS
中列出的四个文件是
。/Src/
中唯一的“.C”文件,您可以使用以下命令自动查找它们,而不是手动将它们键入makefile:


也就是说,通配符构建可以在严格控制的源代码树中工作,就像您似乎正在使用的源代码树一样,但在其他情况下,它可能会导致麻烦;在添加或删除源文件时修改makefile中的一行并不是很多工作。

看起来这就是我需要的。谢谢!
C_SRCS += \
../Src/Tasks/BankWriteTask.c \
../Src/Tasks/CommTask.c \
../Src/Tasks/SrvTask.c \
../Src/Tasks/WatchdogTask.c 

OBJS += \
./Src/Tasks/BankWriteTask.o \
./Src/Tasks/CommTask.o \
./Src/Tasks/SrvTask.o \
./Src/Tasks/WatchdogTask.o 

C_DEPS += \
./Src/Tasks/BankWriteTask.d \
./Src/Tasks/CommTask.d \
./Src/Tasks/SrvTask.d \
./Src/Tasks/WatchdogTask.d 
NEW_C_SRCS := \
../Src/Tasks/BankWriteTask.c \
../Src/Tasks/CommTask.c \
../Src/Tasks/SrvTask.c \
../Src/Tasks/WatchdogTask.c

C_SRCS += $(NEW_C_SRCS)

OBJS += $(patsubst ../%.c,./%.o,$(NEW_C_SRCS))

C_DEPS += $(patsubst ../%.c,./%.d,$(NEW_C_SRCS))
NEW_C_SRCS := $(wildcard ../Src/Tasks/*.c)