Jump to content

Search the Community

Showing results for tags 'makefile'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Comunidade
    • Sugestões, Críticas ou Dúvidas relativas ao P@P
    • Acerca do P@P
  • Comunidade a Trabalhar
    • Apresentação de Projectos de Programação
    • Downloads
    • Revista PROGRAMAR
  • Desenvolvimento Geral
    • C
    • C++
    • Java
    • Pascal
    • Python
    • Bases de Dados
    • Dispositivos Móveis
    • Outras Linguagens
  • Desenvolvimento Orientado para Web
    • PHP
    • HTML
    • CSS
    • Javascript
    • Outras Linguagens de WebDevelopment
    • Desenvolvimento Web
  • Desenvolvimento .NET
    • C#
    • Visual Basic .NET
    • ASP.NET
    • WPF & SilverLight
  • Software e Sistemas Operativos
    • Software de Produtividade
    • Sistemas Operativos
    • Apresentação de Software
  • Informática
    • Interfaces Visuais
    • Computação Gráfica
    • Algoritmia e Lógica
    • Segurança e Redes
    • Hardware
    • Electrónica e Automação Industrial
    • Matemática
    • Software de Contabilidade e Finanças
    • Dúvidas e Discussão de Programação
  • Outras Áreas
    • Notícias de Tecnologia
    • Dúvidas Gerais
    • Discussão Geral
    • Eventos
    • Anúncios de Emprego
    • Tutoriais
    • Snippets / Armazém de Código
  • Arquivo Morto
    • Projectos Descontinuados
    • System Empires

Blogs

  • Blog dos Moderadores
  • Eventos
  • Notícias de Tecnologia
  • Blog do Staff
  • Revista PROGRAMAR
  • Projectos
  • Wiki

Categories

  • Revista PROGRAMAR
  • Tutoriais
  • Textos Académicos
  • Exercícios Académicos
    • Exercícios c/ Solução
    • Exercícios s/ Solução
  • Bibliotecas e Aplicações
  • Outros

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Found 4 results

  1. Boas. Estou novamente com dificuldades em criar um Makefile. Tenho a seguinte estrutura de pastas: include/KHR/khrplatform.h include/glad/glad.h bin/ obj/ src/test.c src/glad.c Makefile Preciso de criar um Makefile para fazer os linkings e etc. Comecei através de um pequeno exemplo que encontrei na net: IDIR =../include CC=gcc CFLAGS=-I$(IDIR) ODIR=obj LDIR =../lib LIBS=-lm _DEPS = hellomake.h DEPS = $(patsubst %,$(IDIR)/%,$(_DEPS)) _OBJ = hellomake.o hellofunc.o OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) $(ODIR)/%.o: %.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) hellomake: $(OBJ) $(CC) -o $@ $^ $(CFLAGS) $(LIBS) .PHONY: clean clean: rm -f $(ODIR)/*.o *~ core $(INCDIR)/*~ E alterei para: CC = gcc LIBS = -lm -Werror -g -pedantic -Wall -std=c99 CFLAGS = -I$(INCDIR) -lGL -lX11 -lGLU -lglut INCDIR = include OBJDIR = obj BINDIR = bin SRCDIR = src TARGET = $(BINDIR)/test _DEPS = khrplatform.h glad.h DEPS = $(patsubst %, $(INCDIR)/KHR/%, $(INCDIR)/glad/%, $(_DEPS)) _OBJ = test.o glad.o OBJ = $(patsubst %, %(OBJDIR)/%, $(_OBJ)) $(OBJDIR)/%.o: $(SRCDIR)/%.c $(DEPS) $(CC) -c -o $@ $< $(CFLAGS) TARGET: $(OBJDIR)/%.o $(CC) -o $@ $^ $(CFLAGS) $(LIBS) .PHONY: clean clean: rm -f $(OBJDIR)/*.o *~ core $(INCDIR)/*~ Ainda só tenho um include no file test.c mas pelo menos a compilação devia correr e talvez dar erros no file test.c mas estou apenas a obter o seguinte: make: *** No rule to make target 'obj/%.o', needed by 'TARGET'. Stop.
  2. PsySc0rpi0n

    Makefile não compila programa correctamente

    Boas. Tenho o seguinte código: #include <avr/interrupt.h> #include <avr/io.h> #include <util/delay.h> #define KEY_INPUT PIND #define LED_OUTPUT PORTB #define LED_DIR DDRB volatile uint8_t key_state = 0; volatile uint8_t key_press = 0; uint8_t get_key_press(uint8_t key_mask){ cli(); key_mask &= key_press; //read key(s) key_press ^= key_mask; //clear key(s) sei(); return key_mask; } void timer_intr_setup(void){ TCCR0B = 1 << CS02; //divide 256 * 256 TIMSK0 = 1 << TOIE0; //enable timer interrupt } int main(void){ timer_intr_setup(); LED_DIR = 0xff; LED_OUTPUT = 0xff; sei(); for(;;){ LED_OUTPUT ^= get_key_press(0x0c); } } ISR (TIMER0_OVF_vect){ static uint8_t ct0, ct1; uint8_t i; i = key_state ^ ~KEY_INPUT; //key changed ? ct0 = ~(ct0 & i); //reset or count ct0 ct1 = ct0 ^ (ct1 & i); //reset or count ct1 i &= ct0 & ct1; //count until roll over key_state ^= i; //thne toggle debounced state //now debounce is finished key_press |= key_state & i; //0->1 key press detect } E o Makefile que estou a usar é: # WinAVR Sample makefile written by Eric B. Weddington, Jörg Wunsch, et al. # Modified (bringing often-changed options to the top) by Elliot Williams # make all = Make software and program # make clean = Clean out built project files. # make program = Download the hex file to the device, using avrdude. Please # customize the avrdude settings below first! # Microcontroller Type MCU = atmega328p # MCU = attiny2313 # MCU = atmega8 # MCU = attiny45 # Target file name (without extension). TARGET = debounce # Programming hardware: type avrdude -c ? # to get a full listing. # AVRDUDE_PROGRAMMER = dapa AVRDUDE_PROGRAMMER = arduino # AVRDUDE_PROGRAMMER = dt006 #AVRDUDE_PORT = /dev/usb # not really needed for usb AVRDUDE_PORT = /dev/ttyUSB0 # linux # AVRDUDE_PORT = lpt1 # windows ############# Don't need to change below here for most purposes (Elliot) # Optimization level, can be [0, 1, 2, 3, s]. 0 turns off optimization. # (Note: 3 is not always the best optimization level. See avr-libc FAQ.) OPT = s # Output format. (can be srec, ihex, binary) FORMAT = ihex # List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c # If there is more than one source file, append them above, or modify and # uncomment the following: #SRC += foo.c bar.c # You can also wrap lines by appending a backslash to the end of the line: #SRC += baz.c \ #xyzzy.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. ASRC = debounce.S # List any extra directories to look for include files here. # Each directory must be seperated by a space. EXTRAINCDIRS = # Optional compiler flags. # -g: generate debugging information (for GDB, or for COFF conversion) # -O*: optimization level # -f...: tuning, see gcc manual and avr-libc documentation # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -ahlms: create assembler listing CFLAGS = -g -O$(OPT) \ -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums \ -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL\ -Wa,-adhlns=$(<:.c=.lst) \ $(patsubst %,-I%,$(EXTRAINCDIRS)) # Set a "language standard" compiler flag. # Unremark just one line below to set the language standard to use. # gnu99 = C99 + GNU extensions. See GCC manual for more information. #CFLAGS += -std=c89 #CFLAGS += -std=gnu89 #CFLAGS += -std=c99 CFLAGS += -std=gnu99 # Optional 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 # Optional 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,--warn-common # Additional libraries # Minimalistic printf version #LDFLAGS += -Wl,-u,vfprintf -lprintf_min # Floating point printf version (requires -lm below) #LDFLAGS += -Wl,-u,vfprintf -lprintf_flt # -lm = math library LDFLAGS += -lm # Programming support using avrdude. Settings and variables. AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex:i #AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) # Uncomment the following if you want avrdude's erase cycle counter. # Note that this counter needs to be initialized first using -Yn, # see avrdude manual. #AVRDUDE_ERASE += -y # Uncomment the following if you do /not/ wish a verification to be # performed after programming the device. AVRDUDE_FLAGS += -V # Increase verbosity level. Please use this when submitting bug # reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> # to submit bug reports. AVRDUDE_FLAGS += -vvv #Run while cable attached or don't AVRDUDE_FLAGS += -E reset #keep chip disabled while cable attached #AVRDUDE_FLAGS += -E noreset #AVRDUDE_WRITE_FLASH = -U lfuse:w:0x04:m #run with 8 Mhz clock #AVRDUDE_WRITE_FLASH = -U lfuse:w:0x21:m #run with 1 Mhz clock #default clock mode #AVRDUDE_WRITE_FLASH = -U lfuse:w:0x01:m #run with 1 Mhz clock no start up time # --------------------------------------------------------------------------- # 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 # Programming support using avrdude. AVRDUDE = avrdude REMOVE = rm -f COPY = cp HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex ELFSIZE = $(SIZE) -A $(TARGET).elf # 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) # Combine all necessary flags and optional flags. # Add target processor to flags. ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) # Default target: make program! all: begin gccversion sizebefore $(TARGET).elf $(TARGET).hex $(TARGET).eep \ $(TARGET).lss $(TARGET).sym sizeafter finished end # $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) # 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. 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 # 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 # Program the device. program: $(TARGET).hex $(TARGET).eep $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) # 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) $@ avr-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) --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).obj $(REMOVE) $(TARGET).a90 $(REMOVE) $(TARGET).sym $(REMOVE) $(TARGET).lnk $(REMOVE) $(TARGET).lss $(REMOVE) $(OBJ) $(REMOVE) $(LST) $(REMOVE) $(SRC:.c=.s) $(REMOVE) $(SRC:.c=.d) $(REMOVE) *~ # Automatically generate C source code dependencies. # (Code originally taken from the GNU make user manual and modified # (See README.txt Credits).) # # Note that this will work with sh (bash) and sed that is shipped with WinAVR # (see the SHELL variable defined above). # This may not work with other shells or other seds. # %.d: %.c set -e; $(CC) -MM $(ALL_CFLAGS) $< \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > $@; \ [ -s $@ ] || rm -f $@ # Remove the '-' if you want to see the dependency files generated. -include $(SRC:.c=.d) # Listing of phony targets. .PHONY : all begin finish end sizebefore sizeafter gccversion coff extcoff \ clean clean_list program No entanto, obtenho os seguintes erros aquando executo o "make" no terminal: et -e; avr-gcc -MM -mmcu=atmega328p -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL -Wa,-adhlns=debounce.lst -std=gnu99 debounce.c \ | sed 's,\(.*\)\.o[ :]*,\1.o \1.d : ,g' > debounce.d; \ [ -s debounce.d ] || rm -f debounce.d -------- begin -------- avr-gcc (GCC) 4.9.2 Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Compiling: debounce.c avr-gcc -c -mmcu=atmega328p -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL -Wa,-adhlns=debounce.lst -std=gnu99 debounce.c -o debounce.o Linking: debounce.elf avr-gcc -mmcu=atmega328p -I. -g -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Werror -Wno-comment -DF_CPU=16000000UL -Wa,-adhlns=debounce.o -std=gnu99 debounce.o debounce.o --output debounce.elf -Wl,-Map=debounce.map,--cref,--warn-common -lm debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text+0x0): multiple definition of `get_key_press' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text+0x0): first defined here debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x0): multiple definition of `key_press' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x0): first defined here debounce.o: In function `timer_intr_setup': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:21: multiple definition of `timer_intr_setup' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:21: first defined here debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text.startup+0x0): multiple definition of `main' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.text.startup+0x0): first defined here debounce.o: In function `__vector_16': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:39: multiple definition of `__vector_16' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:39: first defined here debounce.o: In function `main': /home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x1): multiple definition of `key_state' debounce.o:/home/narayan/3º Ano - Electrónica e Telecomunicações/Cadeiras_3A_2S/Projecto_Telecomunicações/Debounce/Debounce/debounce.c:(.bss+0x1): first defined here collect2: error: ld returned 1 exit status Makefile:314: recipe for target 'debounce.elf' failed make: *** [debounce.elf] Error 1 Mas com o seguinte Makefile, a compilação é feita sem erros: PRG = debounce OBJ = debounce.o MCU_TARGET = atmega328p OPTIMIZE = -Os DEFS = -std=c99 LIBS = # You should not have to change anything below here. CC = avr-gcc # Override is only needed by avr-lib build system. override CFLAGS = -g -Wall -Werror -Wno-comment $(OPTIMIZE) -mmcu=$(MCU_TARGET) $(DEFS) -DF_CPU=16000000UL override LDFLAGS = -Wl,-Map,$(PRG).map -Wl,--warn-common OBJCOPY = avr-objcopy OBJDUMP = avr-objdump all: $(PRG).elf lst text eeprom $(PRG).elf: $(OBJ) $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS) # dependency: debounce.o : debounce.c clean: rm -rf *.o $(PRG).elf *.eps *.png *.pdf *.bak rm -rf *.lst *.map $(EXTRA_CLEAN_FILES) lst: $(PRG).lst %.lst: %.elf $(OBJDUMP) -h -S $< > $@ # Rules for building the .text rom images text: hex bin srec hex: $(PRG).hex bin: $(PRG).bin srec: $(PRG).srec %.hex: %.elf $(OBJCOPY) -j .text -j .data -O ihex $< $@ %.srec: %.elf $(OBJCOPY) -j .text -j .data -O srec $< $@ %.bin: %.elf $(OBJCOPY) -j .text -j .data -O binary $< $@ # Rules for building the .eeprom rom images eeprom: ehex ebin esrec ehex: $(PRG)_eeprom.hex ebin: $(PRG)_eeprom.bin esrec: $(PRG)_eeprom.srec %_eeprom.hex: %.elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O ihex $< $@ \ || { echo empty $@ not generated; exit 0; } %_eeprom.srec: %.elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O srec $< $@ \ || { echo empty $@ not generated; exit 0; } %_eeprom.bin: %.elf $(OBJCOPY) -j .eeprom --change-section-lma .eeprom=0 -O binary $< $@ \ || { echo empty $@ not generated; exit 0; } # Every thing below here is used by avr-libc's build system and can be ignored # by the casual user. FIG2DEV = fig2dev EXTRA_CLEAN_FILES = *.hex *.bin *.srec dox: eps png pdf eps: $(PRG).eps png: $(PRG).png pdf: $(PRG).pdf %.eps: %.fig $(FIG2DEV) -L eps $< $@ %.pdf: %.fig $(FIG2DEV) -L pdf $< $@ %.png: %.fig $(FIG2DEV) -L png $< $@ Queria tentar perceber onde está o problema.
  3. Gonkali

    Debugging - Makefile

    Boas, Se me puderem ajudar na seguinte questão agradecia. De maneira a automatizar a compilação e o debugging de erros e warnings, criei um ficheiro makefile, mas para ser sincero não comprendo muito bem como funciona, nem como adicionar novos ficheiros a este makefile de maneira a automatizar e facilitar o debugging através do terminal UNIX. Se me puderem "iluminar" agradeço. Segue código do makefile: CFLAGS=-Wall -g clean: rm -f ex1 Gonçalo
  4. Ricardo

    [UNIX] Makefile

    Este tutorial tem o propósito de ajudar os programadores de C que se estão a iniciar agora a aprender a trabalhar com Makefiles. Não pretendo que isto seja nenhuma bíblia de Makefiles, é apenas para facilitar a vida a quem se depara com árduas tarefas de compilação e recompilação de programas e desconhece esta ferramenta. Por isso não vou, até porque não tenho tempo, aprofundar muito a questão, fica apenas o essencial... depois é explorar. Neste tutorial os exemplos que vou dar serão basicamente só em C, mas as Makefiles NÃO são uma ferramenta exclusiva desta linguagem. Vou admitir que se encontram num terminal Linux, e que existem os comando básicos (incluindo o make). Vamos então começar: O Make é um programa de computador que tem o intuito de automatizar a compilação de programas que usam diversos ficheiros. As instruções que o Make executa estão todas dentro de um ficheiro chamado 'Makefile' (ou 'makefile'). Esta é uma ferramenta (na minha opinião) indispensável para qualquer programa que se faça, pois a (re)compilação é das partes mais chatas do desenvolvimento de um programa. Um pouco de história: (Wikipedia) Modo de Funcionamento: O programa Make lê a Makefile na directoria em que se está a trabalhar (por defeito), se não for passado nenhum nome ao comando Make, este vai procurar um ficheiro chamado makefile, e caso não exista vai procurar Makefile (tudo isto na directoria em que se está a trabalhar). É de referir que estes ficheiros podem ser 'hidden'. O Make apenas compila/recompila ficheiros que precisam de ser (re)compilados, por exemplo, ficheiros que não foram modificados desde a última compilação não serão recompilados. O que torna o processo de (re)compilação muito mais simples e rápido, visto que muitas vezes existem programas que são formados por muitas dezenas de ficheiros. Exemplo de uma Makefile: foo.o: foo.c foo.h gcc -o foo.o foo.c O que se passa aqui? Bem, nesta Makefile o que se passa é o seguinte: (1ª linha) Se os ficheiros 'foo.c' e 'foo.h' forem mais recentes que o ficheiro 'foo.o', então... (2ª linha) o ficheiro 'foo.o' é recompilado usando o comando "gcc -o foo.o foo.c". Neste exemplo diz-se que o ficheiro 'foo.o' depende dos ficheiros 'foo.c' e 'foo.h'. Há pontos importantes a serem respeitados na sintaxe das Makefiles. Na 2ª linha do exemplo o primeiro carácter é um TAB, isto é essencial. É o que precede um comando a realizar. Na 1ª linha do exemplo está o ficheiro de saída (chamemo-lo assim) e depois ':' e aí vêm as suas dependências. Na linha seguinte o comando a realizar caso seja necessário (questão dos ficheiros terem sido ou não modificados). [To Be Continued]
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.