Использование подстановочных знаков в файле make - PullRequest
0 голосов
/ 06 октября 2019

В настоящее время у меня есть система сборки, основанная на make-файле, который был изначально сгенерирован автоматически. Я сделал некоторые изменения со временем для различных функций. Каждый подкаталог в проекте имеет отдельный make-файл (subdir.mk). Однако каждый экземпляр subdir.mk явно перечисляет файлы в этом подкаталоге. Я хотел бы изменить файлы, чтобы сделать групповую сборку всех файлов в каталоге, чтобы файлы не обновлялись при добавлении новых файлов. Я скопировал один текущий файл ниже. Любые предложения о том, как (или если) я могу изменить эти файлы для создания подстановочных знаков? Я не эксперт по изготовлению (хотя, если я переживу свой текущий проект, я бы хотел им стать). Спасибо.

################################################################################
# Automatically-generated file. Do not edit!
################################################################################

# Add inputs and outputs from these tool invocations to the build variables 

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 

# Each subdirectory must supply rules for building sources it contributes
Src/Tasks/%.o: ../Src/Tasks/%.c
arm-atollic-eabi-gcc -c -mthumb -mcpu=cortex-m3 -std=gnu11 -D__weak=__attribute__((weak)) -D__packed=__attribute__((__packed__)) -DUSE_HAL_DRIVER -DSTM32L152xE -DCONFIG_DEBUG -DCONFIG_RELEASE=1 -I..\Config -I..\Inc -I..\Inc\Sys -I..\Inc\StmHal -I..\Inc\Driver -I..\Inc\Lib -I..\Inc\Business -I..\Inc\Tasks -I..\Drivers\CMSIS\Include -I..\Drivers\CMSIS\Device\ST\STM32L1xx\Include -I..\Drivers\STM32L1xx_HAL_Driver\Inc -I..\Drivers\STM32L1xx_HAL_Driver\Inc\Legacy -I..\Middlewares\Third_Party\FreeRTOS\Source\include -I..\Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS -I..\Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM3 -I..\Middlewares\Third_Party\FreeRTOS-Plus\Source\FreeRTOS-Plus-CLI -I..\Middlewares\ST\STM32_Cryptographic\Inc -I..\Middlewares\ST\STM32_Cryptographic\Inc\HASH\SHA256 -I..\Middlewares\Third_Party\TraceRecorder\include -I..\Middlewares\Third_Party\TraceRecorder\streamports\Jlink_RTT -I..\Middlewares\Third_Party\TraceRecorder\streamports\Jlink_RTT\include -I../Inc -I../Drivers/STM32L1xx_HAL_Driver/Inc -O0 -ffunction-sections -fdata-sections -g -fstack-usage -Wall -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@)" -specs=nano.specs -o "$@" "$<"

1 Ответ

0 голосов
/ 07 октября 2019

Первое замечание: в этих списках файлов много избыточности:

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 patsubst:

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))

И если четыре файла, перечисленные в C_SRCS, являются единственными ".c" файлами в ../Src/, вместо того, чтобы вводить их вручную в make-файл, вы можете сделать Make найти их автоматически с помощью подстановочной функции:

NEW_C_SRCS := $(wildcard ../Src/Tasks/*.c)

Тем не менее, подстановочные знаки могут работать в жестко контролируемом исходном дереве, подобном тому, которое вы, похоже, используете, но в противном случае это может вызвать головные боли;изменение одной строки в make-файле при добавлении или удалении исходного файла не представляет особой работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...