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

e3bfsja2  于 2023-04-11  发布在  其他
关注(0)|答案(1)|浏览(136)

此问题已在此处有答案

Avoid compilation of unchanged sources using Makefile(4个答案)
3天前关闭。
我的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

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

nkoocmlb

nkoocmlb1#

我想我刚刚想到了一个可能的解决方案:
通过消除源文件的长列表来减少Makefile的大小,并从等式中包含文件夹,这涉及到额外的脚本:shell、python或任何好的

相关问题