logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Makefile - jak dodać więcej plików C do projektu?

Koriel 01 Cze 2007 13:38 2147 2
REKLAMA
  • #1 3942517
    Koriel
    Poziom 13  
    Posty: 113
    Pomógł: 4
    Ocena: 3
    Jak zmodyfikować poniższy plik Makefile aby prawidłowo kompilował się projekt złożony z kilku plików .c ?
    Próbuje zbudowac projekt na bazie systemu operacyjnego AVRX, AVRStudio nie chce tego łyknąć.

    Dodano po 40 [sekundy]:

    # Hey Emacs, this is a -*- makefile -*-
    #
    # WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al.
    # Released to the Public Domain
    # Please read the make user manual!
    #
    # Additional material for this makefile was submitted by:
    # Tim Henigan
    # Peter Fleury
    # Reiner Patommel
    # Sander Pool
    # Frederik Rouleau
    # Markus Pfaff
    #
    # On command line:
    #
    # make all = Make software.
    #
    # make clean = Clean out built project files.
    #
    # make coff = Convert ELF to AVR COFF (for use with AVR Studio 3.x or VMLAB).
    #
    # make extcoff = Convert ELF to AVR Extended COFF (for use with AVR Studio
    # 4.07 or greater).
    #
    # make program = Download the hex file to the device, using avrdude. Please
    # customize the avrdude settings below first!
    #
    # make filename.s = Just compile filename.c into the assembler code only
    #
    # To rebuild project do "make clean" then "make all".
    #
    TRUE = 1
    FALSE = 0

    # MCU name
    MCU = atmega32


    # default hardware values in case they are not defined in the source

    CPUCLK = 16000000L
    BAUDRATE= 38400L
    TICKRATE= 2000

    TARGET = ms500

    # Output format. (can be srec, ihex, binary)
    FORMAT = ihex

    SRC = $(TARGET).c

    # List Assembler source files here.
    # Make them always end in a capital .S. Files ending in a lowercase .s
    # will not be considered source files but generated files (assembler
    # output from the compiler), and will be deleted upon "make clean"!
    # Even though the DOS/Win* filesystem matches both .s and .S the same,
    # it will preserve the spelling of the filenames, and gcc itself does
    # care about how the name is spelled on its command-line.



    GCCLIB = ../avrx/avrx.a

    # Optimization level, can be [0, 1, 2, 3, s].
    # 0 = turn off optimization. s = optimize for size.
    # (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
    OPT = s

    # Debugging format.
    # Native formats for AVR-GCC's -g are stabs [default], or dwarf-2.
    # AVR (extended) COFF requires stabs, plus an avr-objcopy run.
    #DEBUG = stabs
    DEBUG = dwarf-2

    # List any extra directories to look for include files here.
    # Each directory must be seperated by a space.
    EXTRAINCDIRS =


    # Compiler flag to set the C Standard level.
    # c89 - "ANSI" C
    # gnu89 - c89 plus GCC extensions
    # c99 - ISO C99 standard (not yet fully implemented)
    # gnu99 - c99 plus GCC extensions
    CSTANDARD = -std=gnu99

    # Place -D or -U options here
    CDEFS = -D$(TARGET) -DCPUCLK=$(CPUCLK) -DTICKRATE=$(TICKRATE) -DBAUDRATE=$(BAUDRATE)

    # Place -I options here
    CINCS = -I../avrx


    # Compiler flags.
    # -g*: generate debugging information
    # -O*: optimization level
    # -f...: tuning, see GCC manual and avr-libc documentation
    # -Wall...: warning level
    # -Wa,...: tell GCC to pass this to the assembler.
    # -adhlns...: create assembler listing
    CFLAGS = -g$(DEBUG)
    CFLAGS += $(CDEFS) $(CINCS)
    CFLAGS += -O$(OPT)
    #CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
    #CFLAGS += -funsigned-bitfields -fpack-struct -fshort-enums -fnew-ra
    CFLAGS += -funsigned-bitfields -fpack-struct -fshort-enums
    CFLAGS += -Wall -Wstrict-prototypes
    CFLAGS += -Wa,-adhlns=$(<:.c=.lst)
    CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS))
    CFLAGS += $(CSTANDARD)



    # Assembler flags.
    # -Wa,...: tell GCC to pass this to the assembler.
    # -ahlms: create listing
    # -gstabs: have the assembler create line number information; note that
    # for use in COFF files, additional information about filenames
    # and function names needs to be present in the assembler source
    # files -- see avr-libc docs [FIXME: not yet described there]
    ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs



    #Additional libraries.

    # Minimalistic printf version
    PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min

    # Floating point printf version (requires MATH_LIB = -lm below)
    PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt

    PRINTF_LIB =

    # Minimalistic scanf version
    SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min

    # Floating point + %[ scanf version (requires MATH_LIB = -lm below)
    SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt

    SCANF_LIB =

    MATH_LIB = -lm

    # External memory options

    # 64 KB of external RAM, starting after internal RAM (ATmega128!),
    # used for variables (.data/.bss) and heap (malloc()).
    #EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff

    # 64 KB of external RAM, starting after internal RAM (ATmega128!),
    # only used for heap (malloc()).
    #EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff

    EXTMEMOPTS =

    # Linker flags.
    # -Wl,...: tell GCC to pass this to linker.
    # -Map: create map file
    # --cref: add cross reference to map file
    LDFLAGS = -Wl,-Map=$(TARGET).map,--cref
    LDFLAGS += $(EXTMEMOPTS)
    LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)




    # Define directories, if needed.
    DIRAVR = c:/winavr
    DIRAVRBIN = $(DIRAVR)/bin
    DIRAVRUTILS = $(DIRAVR)/utils/bin
    DIRINC = .
    DIRLIB = $(DIRAVR)/avr/lib


    # Define programs and commands.
    SHELL = sh
    CC = avr-gcc
    OBJCOPY = avr-objcopy
    OBJDUMP = avr-objdump
    SIZE = avr-size
    NM = avr-nm
    AVRDUDE = avrdude
    REMOVE = rm -fr
    COPY = cp




    # Define Messages
    # English
    MSG_ERRORS_NONE = Errors: none
    MSG_BEGIN = -------- begin --------
    MSG_END = -------- end --------
    MSG_SIZE_BEFORE = Size before:
    MSG_SIZE_AFTER = Size after:
    MSG_COFF = Converting to AVR COFF:
    MSG_EXTENDED_COFF = Converting to AVR Extended COFF:
    MSG_FLASH = Creating load file for Flash:
    MSG_EEPROM = Creating load file for EEPROM:
    MSG_EXTENDED_LISTING = Creating Extended Listing:
    MSG_SYMBOL_TABLE = Creating Symbol Table:
    MSG_LINKING = Linking:
    MSG_COMPILING = Compiling:
    MSG_ASSEMBLING = Assembling:
    MSG_CLEANING = Cleaning project:




    # Define all object files.
    OBJ = $(SRC:.c=.o) $(ASRC:.S=.o)

    # Define all listing files.
    LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)


    # Compiler flags to generate dependency files.
    GENDEPFLAGS = -Wp,-M,-MP,-MT,$(*F).o,-MF,.dep/$(@F).d


    # Combine all necessary flags and optional flags.
    # Add target processor to flags.
    ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS)
    ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)


    # Default target.
    Samples:
    make all TARGET=ms500



    #all: begin gccversion sizebefore build sizeafter finished end
    all: sizebefore build sizeafter

    build: elf hex lss sym
    #build: coff hex lss sym

    elf: $(TARGET).elf
    hex: $(TARGET).hex
    eep: $(TARGET).eep
    lss: $(TARGET).lss
    sym: $(TARGET).sym

    # Eye candy.
    # AVR Studio 3.x does not check make's exit code but relies on
    # the following magic strings to be generated by the compile job.
    begin:
    @Echo.
    @Echo. $(MSG_BEGIN)

    finished:
    # @Echo. $(MSG_ERRORS_NONE)

    end:
    @Echo. $(MSG_END)
    @Echo.


    # Display size of file.
    HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex
    ELFSIZE = $(SIZE) -A $(TARGET).elf
    sizebefore:
    @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); echo; fi

    sizeafter:
    @if [ -f $(TARGET).elf ]; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); echo; fi



    # Display compiler version information.
    gccversion :
    @$(CC) --version



    # Program the device.
    program: $(TARGET).hex $(TARGET).eep
    $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)




    # Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
    COFFCONVERT=$(OBJCOPY) --debugging \
    --change-section-address .data-0x800000 \
    --change-section-address .bss-0x800000 \
    --change-section-address .noinit-0x800000 \
    --change-section-address .eeprom-0x810000


    coff: $(TARGET).elf
    @Echo.
    @Echo. $(MSG_COFF) $(TARGET).cof
    $(COFFCONVERT) -O coff-avr $< $(TARGET).cof


    extcoff: $(TARGET).elf
    @Echo.
    @Echo. $(MSG_EXTENDED_COFF) $(TARGET).cof
    $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof



    # Create final output files (.hex, .eep) from ELF output file.
    %.hex: %.elf
    @Echo.
    @Echo. $(MSG_FLASH) $@
    $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@

    %.eep: %.elf
    @Echo.
    @Echo. $(MSG_EEPROM) $@
    -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
    --change-section-lma .eeprom=0 -O $(FORMAT) $< $@

    # Create extended listing file from ELF output file.
    %.lss: %.elf
    @Echo.
    @Echo. $(MSG_EXTENDED_LISTING) $@
    $(OBJDUMP) -h -S $< > $@

    # Create a symbol table from ELF output file.
    %.sym: %.elf
    @Echo.
    @Echo. $(MSG_SYMBOL_TABLE) $@
    $(NM) -n $< > $@



    # Link: create ELF output file from object files.
    .SECONDARY : $(TARGET).elf
    .PRECIOUS : $(OBJ)
    %.elf: $(OBJ)
    @Echo.
    @Echo. $(MSG_LINKING) $@
    $(CC) $(ALL_CFLAGS) $(OBJ) $(GCCLIB) --output $@ $(LDFLAGS)


    # Compile: create object files from C source files.
    %.o : %.c
    @Echo.
    @Echo. $(MSG_COMPILING) $<
    $(CC) -c $(ALL_CFLAGS) $< -o $@


    # Compile: create assembler files from C source files.
    %.s : %.c
    $(CC) -S $(ALL_CFLAGS) $< -o $@


    # Assemble: create object files from assembler source files.
    %.o : %.S
    @Echo.
    @Echo. $(MSG_ASSEMBLING) $<
    $(CC) -c $(ALL_ASFLAGS) $< -o $@



    # Target: clean project.
    clean: begin clean_list finished end

    clean_list :
    @Echo.
    @Echo. $(MSG_CLEANING)
    $(REMOVE) $(TARGET).hex
    $(REMOVE) $(TARGET).eep
    $(REMOVE) $(TARGET).obj
    $(REMOVE) $(TARGET).cof
    # $(REMOVE) $(TARGET).elf
    $(REMOVE) $(TARGET).map
    $(REMOVE) $(TARGET).a90
    $(REMOVE) $(TARGET).sym
    $(REMOVE) $(TARGET).lnk
    $(REMOVE) $(TARGET).lss
    $(REMOVE) $(OBJ)
    $(REMOVE) *.o *.lst *.map *.lss *.sym *.cof *.eep
    $(REMOVE) $(LST)
    $(REMOVE) $(SRC:.c=.s)
    $(REMOVE) $(SRC:.c=.d)
    $(REMOVE) .dep



    # Include the dependency files.
    -include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*)


    # Listing of phony targets.
    .PHONY : all begin finish end sizebefore sizeafter gccversion \
    build elf hex eep lss sym coff extcoff \
    clean clean_list program
  • REKLAMA
  • #3 3942610
    Koriel
    Poziom 13  
    Posty: 113
    Pomógł: 4
    Ocena: 3
    Thx, zadziałało.
REKLAMA