Avr-gcc:make — различия между версиями

Материал из roboforum.ru Wiki
Перейти к: навигация, поиск
 
(Пример Makefile)
Строка 13: Строка 13:
  
 
== Пример Makefile ==
 
== Пример Makefile ==
<source lang="bash">
+
 
 +
В примере все файлы программ находятся в одном каталоге,
 +
но это легко изменить, нужно изменить <code>source_dirs</code>,
 +
например раскомментируем строку 6.
 +
 
 +
{{#tree:openlevels=2|
 +
*project_root_dir
 +
**doc
 +
***html
 +
****index.html
 +
***latex
 +
****Makefile
 +
****doxygen
 +
**includes
 +
***twi.h
 +
***twi.cpp
 +
***usart.h
 +
***usart.cpp
 +
**conf.h
 +
**main.h
 +
**main.cpp
 +
**Doxyfile
 +
**Makefile
 +
}}
 +
 
 +
'''Внимание''' мэйк написан для компиляции [[C++]]
 +
поэтому расширение файлов <code>'.cpp'</code>
 +
если вы хотите использовать Си - нужно изменить строки:
 +
<code>22. cc := avr-gcc</code>
 +
<code>30. search_wildcards := $(addsuffix /*.c,$(source_dirs))</code>
 +
<code>32. $(addsuffix .out,$(program_name)): $(notdir $(patsubst %.c,%.o, $(wildcard $(search_wildcards) ) ) )</code>
 +
<code>39. %.o: %.c</code>
 +
 
 +
'''Внимание:''' если вы не хотите генерировать документацию к своей программе <code>doxygen</code>'ом,
 +
то вам нужно изменить строку:
 +
<code>35. #$(doxygen) 2>> $(doxylog)</code>
 +
 
 +
 
 +
<source lang="bash" line="1">
 
# Makefile
 
# Makefile
 
# output filename
 
# output filename
 
program_name := main
 
program_name := main
 
# source directories ('.' - current dir)
 
# source directories ('.' - current dir)
source_dirs := .
+
source_dirs := .
#source_dirs := . includes
+
#source_dirs := . includes
#source_dirs     := $(addprefix ../,$(source_dirs))
+
#source_dirs := $(addprefix ../,$(source_dirs))
  
 
# uC type
 
# uC type

Версия 17:34, 14 октября 2007



GNU Make - это программа для сборки программ. почитать можно здесь

я же приведу простой мэйкфайл чтоб начинающим не нужно было его писать самим.

Пример Makefile

В примере все файлы программ находятся в одном каталоге, но это легко изменить, нужно изменить source_dirs, например раскомментируем строку 6.

{{#tree:openlevels=2|

  • project_root_dir
    • doc
      • html
        • index.html
      • latex
        • Makefile
        • doxygen
    • includes
      • twi.h
      • twi.cpp
      • usart.h
      • usart.cpp
    • conf.h
    • main.h
    • main.cpp
    • Doxyfile
    • Makefile

}}

Внимание мэйк написан для компиляции C++ поэтому расширение файлов '.cpp' если вы хотите использовать Си - нужно изменить строки:

22. cc := avr-gcc
30. search_wildcards := $(addsuffix /*.c,$(source_dirs))
32. $(addsuffix .out,$(program_name)): $(notdir $(patsubst %.c,%.o, $(wildcard $(search_wildcards) ) ) )
39. %.o: %.c

Внимание: если вы не хотите генерировать документацию к своей программе doxygen'ом, то вам нужно изменить строку:

35. #$(doxygen) 2>> $(doxylog)


<source lang="bash" line="1">

  1. Makefile
  2. output filename

program_name := main

  1. source directories ('.' - current dir)

source_dirs := .

  1. source_dirs := . includes
  2. source_dirs := $(addprefix ../,$(source_dirs))
  1. uC type

mcu := atmega128

  1. CPU freq

f_cpu := 14745600UL

  1. compiler flags

cpflags := -mmcu=$(mcu) -Wall -g -O2 -DF_CPU=$(f_cpu)

  1. linker flags

ldflags := -mmcu=$(mcu) -Wl

  1. - do not need to edit ----------------------------------------------

rm := rm -rf

  1. compiller

cc := avr-g++ cclog := compile.log

  1. avr-objcopy

objcpy := avr-objcopy

  1. doxygen

doxygen := doxygen doxylog := doxygen.log

search_wildcards := $(addsuffix /*.cpp,$(source_dirs))

$(addsuffix .out,$(program_name)): $(notdir $(patsubst %.cpp,%.o, $(wildcard $(search_wildcards) ) ) ) $(cc) $(ldflags) $^ -o $@ 2>>$(cclog) $(objcpy) -R.eeprom -O ihex $(addsuffix .out,$(program_name)) $(addsuffix .hex,$(program_name)) $(doxygen) 2>> $(doxylog)

VPATH := $(source_dirs)

%.o: %.cpp $(cc) $(cpflags) $(addprefix -I,$(source_dirs)) -MD -c $< 2>>$(cclog)

include $(wildcard *.d)

clean: $(rm) $(addsuffix .out,$(program_name)) $(addsuffix .hex,$(program_name)) *.d *.o $(cclog) $(doxylog) doc </source>