如何减小 Makefile 的大小并避免编译未更改的源代码[重复]

问题描述 投票:0回答:1

我的 Makefile 太长,每次执行“make”命令时都从头开始编译所有源代码

看起来如下:

TARGET=analyser
CC=arm-none-eabi-gcc
OBJCPY=arm-none-eabi-objcopy
CFLAGS= -DNDEBUG -DCPU_MK64FN1M0VLL12 -DUSE_RTOS=1 -DPRINTF_ADVANCED_ENABLE=1 \
-DFRDM_K64F -DFREEDOM -DFSL_RTOS_FREE_RTOS -Os -Wall -fno-common \
-ffunction-sections -fdata-sections -ffreestanding -fno-builtin \
-mthumb -mapcs -std=gnu99 -mcpu=cortex-m4 -mfloat-abi=hard -mfpu=fpv4-sp-d16 -MMD -MP \
--specs=nano.specs --specs=nosys.specs -Wall -fno-common -ffunction-sections \
-fdata-sections -ffreestanding -fno-builtin -mthumb -mapcs -Xlinker --gc-sections \
-Xlinker -static -Xlinker -z -Xlinker muldefs -Xlinker -Map=output.map -mcpu=cortex-m4 \
-mfloat-abi=hard -mfpu=fpv4-sp-d16 -Xlinker --defsym=__stack_size__=2048 -Xlinker \
--defsym=__heap_size__=25600 -Wall

LDSCRIPT=linker/MK64FN1M0xxx12_flash.ld

ASM_SOURCES := $(shell find . -name "*.S")
CPP_SOURCES := $(shell find . -name "*.c")

SRC=\
    startup/startup_MK64F12.S \
    fsl/fsl_uart.c \
    fsl/fsl_uart_freertos.c \
    fsl/fsl_dspi_freertos.c \
    fsl/fsl_gpio.c \
    fsl/fsl_phy.c \
    fsl/fsl_dspi.c \
    fsl/fsl_ftfx_controller.c \
    fsl/fsl_assert.c \
    fsl/fsl_smc.c \
    fsl/fsl_common.c \
    fsl/fsl_debug_console.c \
    fsl/fsl_ftfx_cache.c \
    fsl/fsl_sbrk.c \
    fsl/fsl_ftfx_flash.c \
    fsl/fsl_sim.c \
    fsl/fsl_str.c \
    fsl/fsl_ftfx_flexnvm.c \
    fsl/fsl_clock.c \
    fsl/fsl_enet.c \
    drivers/lists/generic_list.c \
    drivers/serial_manager/serial_manager.c \
    drivers/serial_manager/serial_port_uart.c \
    drivers/uart/uart_adapter.c \
    FreeRTOS/src/list.c \
    FreeRTOS/src/event_groups.c \
    FreeRTOS/src/timers.c \
    FreeRTOS/src/stream_buffer.c \
    FreeRTOS/src/portable/MemMang/heap_3.c \
    FreeRTOS/src/portable/GCC/ARM_CM4F/port.c \
    FreeRTOS/src/tasks.c \
    FreeRTOS/src/queue.c \
    startup/startup_MK64F12.c \
    app/config/board.c \
    app/config/clock_config.c \
    app/config/pin_mux.c \
    app/modules/gpio.c \
    app/modules/lwip.c \
    app/network_analyser.c \
    lwip/src/core/stats.c \
    lwip/src/core/netif.c \
    lwip/src/core/mem.c \
    lwip/src/core/inet_chksum.c \
    lwip/src/core/altcp.c \
    lwip/src/core/memp.c \
    lwip/src/core/tcp_out.c \
    lwip/src/core/raw.c \
    lwip/src/core/dns.c \
    lwip/src/core/ipv4/autoip.c \
    lwip/src/core/ipv4/ip4_frag.c \
    lwip/src/core/ipv4/icmp.c \
    lwip/src/core/ipv4/dhcp.c \
    lwip/src/core/ipv4/etharp.c \
    lwip/src/core/ipv4/ip4.c \
    lwip/src/core/ipv4/ip4_addr.c \
    lwip/src/core/ipv4/igmp.c \
    lwip/src/core/sys.c \
    lwip/src/core/altcp_tcp.c \
    lwip/src/core/pbuf.c \
    lwip/src/core/ipv6/ip6.c \
    lwip/src/core/ipv6/ip6_addr.c \
    lwip/src/core/ipv6/icmp6.c \
    lwip/src/core/ipv6/ethip6.c \
    lwip/src/core/ipv6/inet6.c \
    lwip/src/core/ipv6/mld6.c \
    lwip/src/core/ipv6/dhcp6.c \
    lwip/src/core/ipv6/nd6.c \
    lwip/src/core/ipv6/ip6_frag.c \
    lwip/src/core/tcp_in.c \
    lwip/src/core/tcp.c \
    lwip/src/core/def.c \
    lwip/src/core/ip.c \
    lwip/src/core/altcp_alloc.c \
    lwip/src/core/udp.c \
    lwip/src/core/timeouts.c \
    lwip/src/core/init.c \
    lwip/src/api/err.c \
    lwip/src/api/netdb.c \
    lwip/src/api/netifapi.c \
    lwip/src/api/if_api.c \
    lwip/src/api/api_msg.c \
    lwip/src/api/sockets.c \
    lwip/src/api/netbuf.c \
    lwip/src/api/api_lib.c \
    lwip/src/api/tcpip.c \
    lwip/src/netif/lowpan6_ble.c \
    lwip/src/netif/lowpan6_common.c \
    lwip/src/netif/bridgeif_fdb.c \
    lwip/src/netif/lowpan6.c \
    lwip/src/netif/ppp/lcp.c \
    lwip/src/netif/ppp/auth.c \
    lwip/src/netif/ppp/multilink.c \
    lwip/src/netif/ppp/ipv6cp.c \
    lwip/src/netif/ppp/pppos.c \
    lwip/src/netif/ppp/pppcrypt.c \
    lwip/src/netif/ppp/eui64.c \
    lwip/src/netif/ppp/ccp.c \
    lwip/src/netif/ppp/vj.c \
    lwip/src/netif/ppp/pppol2tp.c \
    lwip/src/netif/ppp/mppe.c \
    lwip/src/netif/ppp/ppp.c \
    lwip/src/netif/ppp/chap-md5.c \
    lwip/src/netif/ppp/fsm.c \
    lwip/src/netif/ppp/eap.c \
    lwip/src/netif/ppp/magic.c \
    lwip/src/netif/ppp/polarssl/arc4.c \
    lwip/src/netif/ppp/polarssl/des.c \
    lwip/src/netif/ppp/polarssl/md5.c \
    lwip/src/netif/ppp/polarssl/md4.c \
    lwip/src/netif/ppp/polarssl/sha1.c \
    lwip/src/netif/ppp/chap_ms.c \
    lwip/src/netif/ppp/pppapi.c \
    lwip/src/netif/ppp/upap.c \
    lwip/src/netif/ppp/chap-new.c \
    lwip/src/netif/ppp/utils.c \
    lwip/src/netif/ppp/demand.c \
    lwip/src/netif/ppp/lwip_ecp.c \
    lwip/src/netif/ppp/ipcp.c \
    lwip/src/netif/ppp/pppoe.c \
    lwip/src/netif/bridgeif.c \
    lwip/src/netif/slipif.c \
    lwip/src/netif/ethernet.c \
    lwip/src/netif/zepif.c \
    lwip/port/enet_ethernetif_kinetis.c \
    lwip/port/sys_arch.c \
    lwip/port/enet_ethernetif.c \

INCLUDES=\
    -Iapp/include \
    -ICMSIS \
    -Ifsl \
    -IFreeRTOS/include \
    -IFreeRTOS/include/private \
    -IFreeRTOS/src/portable/GCC/ARM_CM4F \
    -Iinclude \
    -Idrivers/uart \
    -Idrivers/serial_manager \
    -Idrivers/lists \
    -Ilwip/port \
    -Ilwip/src \
    -Ilwip/src/include \

all:
    $(CC) $(INCLUDES) $(SRC) $(CFLAGS) -T $(LDSCRIPT) -o $(TARGET).elf
    $(OBJCPY) $(TARGET).elf $(TARGET).bin -O binary

clean:
    rm $(TARGET).elf $(TARGET).bin $(TARGET).d output.map 

我知道有一种方法可以从源代码编译目标文件,然后从这些对象构建最终程序。我尝试了很多例子,但没有一个能让我处理分布在许多文件夹和子文件夹中的源

有人可以帮我解决这个问题吗?

c assembly makefile
1个回答
0
投票

我想我只是想出了一个潜在的解决方案:

通过消除源文件的长列表和从等式中包含文件夹来减少 Makefile 的大小是涉及额外的脚本:shell、python 或任何好的

© www.soinside.com 2019 - 2024. All rights reserved.