Avr-gcc:make — различия между версиями
Vooon (обсуждение | вклад) (Новая: Категория:Компиляторы Категория:HOWTO Категория:Языки программирования Категория:C [[Категори...) |
Avr123 (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии 1 участника) | |||
Строка 10: | Строка 10: | ||
[http://www.linux.org.ru/books/GNU/Gmake.htm почитать можно здесь] | [http://www.linux.org.ru/books/GNU/Gmake.htm почитать можно здесь] | ||
− | я же приведу простой мэйкфайл чтоб начинающим не нужно было его писать самим. | + | я же приведу простой мэйкфайл чтоб начинающим не нужно было его писать самим |
+ | |||
+ | Добавлено avr123: ... и у них не установлена программа [http://atmel.ru/Software/Software.htm AVR Studio] и WinAVR. Если же AVR Studio студия и WinAVR установленs то в студии имеется мастер создания проекта кторый отменяет ручной труд по созданию мэйкфайла. Запустите AVR Studio, далее -> Прожект -> Прожект визад ( он обычно открывается автоматически при запуске сутидии ) -> Нью прожект -> AVR GCC -> далее укажите папку для вашего проекта и прочую информацию запрашиваемую мастером. | ||
== Пример 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> | ||
+ | |||
+ | '''Важно:''' отступы должны быть сделаны символом табуляции (ASCII 9) иначе мейк работать не будет.<br /> | ||
+ | (строки с табулятором вначале: 33-35, 40, 45) | ||
+ | |||
+ | |||
+ | |||
+ | <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 | + | #source_dirs := . includes |
− | #source_dirs | + | #source_dirs := $(addprefix ../,$(source_dirs)) |
# uC type | # uC type | ||
Строка 59: | Строка 103: | ||
clean: | clean: | ||
$(rm) $(addsuffix .out,$(program_name)) $(addsuffix .hex,$(program_name)) *.d *.o $(cclog) $(doxylog) doc | $(rm) $(addsuffix .out,$(program_name)) $(addsuffix .hex,$(program_name)) *.d *.o $(cclog) $(doxylog) doc | ||
+ | |||
</source> | </source> |
Текущая версия на 10:24, 13 января 2010
GNU Make - это программа для сборки программ. почитать можно здесь
я же приведу простой мэйкфайл чтоб начинающим не нужно было его писать самим
Добавлено avr123: ... и у них не установлена программа AVR Studio и WinAVR. Если же AVR Studio студия и WinAVR установленs то в студии имеется мастер создания проекта кторый отменяет ручной труд по созданию мэйкфайла. Запустите AVR Studio, далее -> Прожект -> Прожект визад ( он обычно открывается автоматически при запуске сутидии ) -> Нью прожект -> AVR GCC -> далее укажите папку для вашего проекта и прочую информацию запрашиваемую мастером.
Пример Makefile
В примере все файлы программ находятся в одном каталоге,
но это легко изменить, нужно изменить source_dirs
,
например раскомментируем строку 6.
{{#tree:openlevels=2|
- project_root_dir
- doc
- html
- index.html
- latex
- Makefile
- doxygen
- html
- includes
- twi.h
- twi.cpp
- usart.h
- usart.cpp
- conf.h
- main.h
- main.cpp
- Doxyfile
- Makefile
- doc
}}
Внимание мэйк написан для компиляции 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)
Важно: отступы должны быть сделаны символом табуляции (ASCII 9) иначе мейк работать не будет.
(строки с табулятором вначале: 33-35, 40, 45)
<source lang="bash" line="1">
- Makefile
- output filename
program_name := main
- source directories ('.' - current dir)
source_dirs := .
- source_dirs := . includes
- source_dirs := $(addprefix ../,$(source_dirs))
- uC type
mcu := atmega128
- CPU freq
f_cpu := 14745600UL
- compiler flags
cpflags := -mmcu=$(mcu) -Wall -g -O2 -DF_CPU=$(f_cpu)
- linker flags
ldflags := -mmcu=$(mcu) -Wl
- - do not need to edit ----------------------------------------------
rm := rm -rf
- compiller
cc := avr-g++ cclog := compile.log
- avr-objcopy
objcpy := avr-objcopy
- 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>