Правильное подключение #include
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
с чего бы? Этим автоматика занимается, она в отличие от человека в состоянии отследить были ли изменения и надо ли пересобирать весть проект или только отдельные части.
- Реклама
[uquote="ARV",url="/forum/viewtopic.php?p=4203029#p4203029"]только ваш подход чреват тем, что собирая новый проект из "отработанных и гарантированно работающих" старых файлов, вы рискуете в одном из них забыть про какой-то дефайн, и получить чудеса...[/uquote]
Да нет...
Я в глобальный инклудник выношу только то, что общее для конкретного проекта.
Там нет кода, только дефайны и тайпдефы.
И даже если я что то использованное забираю - то смотрю, что забираю.
А бездумное копирование - это пусть пионэры делают. Им можно, они любят трудности."Стоя и в гамаке".
а я старый ленивый инженер.
Да нет...
Я в глобальный инклудник выношу только то, что общее для конкретного проекта.
Там нет кода, только дефайны и тайпдефы.
И даже если я что то использованное забираю - то смотрю, что забираю.
А бездумное копирование - это пусть пионэры делают. Им можно, они любят трудности."Стоя и в гамаке".
а я старый ленивый инженер.
- Сообщения: 1525
- Зарегистрирован: Чт июн 10, 2010 20:11:19
Да многие наверное так делают. У меня например тоже есть hardware.h, в котором вынесены пины и настройки используемой периферии. Но у меня он явно подключается в каждую периферию.
COKPOWEHEU, ну вот кстати, тоже правильно.
Я изначально ВСЮ коммуникацию с периферией описываю в HAL.h/HAL.c с целью максимально абстрагироваться от железа
Наружу торчат безликие getButton, setLed, низкоуровневые процедуры отправки данных в дисплей и т.д.
Это позволяет мне менять в проекте МК на другой (при условии, что периферия подходящая есть). Пригождалось пару раз. Миграция была с АВР на СТМ.
Просто переписал HAL - и всё заработало.
Я изначально ВСЮ коммуникацию с периферией описываю в HAL.h/HAL.c с целью максимально абстрагироваться от железа
Наружу торчат безликие getButton, setLed, низкоуровневые процедуры отправки данных в дисплей и т.д.
Это позволяет мне менять в проекте МК на другой (при условии, что периферия подходящая есть). Пригождалось пару раз. Миграция была с АВР на СТМ.
Просто переписал HAL - и всё заработало.
[uquote="GoldenAndy",url="/forum/viewtopic.php?p=4203019#p4203019"]ARV, я не любитель руками править всякие ключи компилятора, редактировать make и прочее...[/uquote]
Да хоспади, что там в Makefile редактировать-то?
Я их вообще руками пишу с нуля.
Простой Makefile, для простого проекта, поддерживающий инкрементную сборку и переваривающий как .c так и .cpp файлы.
При желании и после небольших правок можно использовать и для avr-gcc.
Требует три папки:
src - для исходников
inc - для заголовочников
obj - для объектных файлов и файлов зависимостей.
Да хоспади, что там в Makefile редактировать-то?
Я их вообще руками пишу с нуля.
Простой Makefile, для простого проекта, поддерживающий инкрементную сборку и переваривающий как .c так и .cpp файлы.
При желании и после небольших правок можно использовать и для avr-gcc.
Требует три папки:
src - для исходников
inc - для заголовочников
obj - для объектных файлов и файлов зависимостей.
Спойлер
Код: Выделить всё
#********************************************************
# Makefile
#
# $@ target name (имя цели)
# $^ all depends of target (список всех зависимостей цели)
# $? only new depends in target (только новые зависимости цели)
# $< first depend name from target (имя первой зависимости цели)
#
#********************************************************
# PROJECT CONFIG
OUTLIB = luamqtt.so
INC_DIR = inc
SRC_DIR = src
OBJ_DIR = obj
LDLIBS = -l mosquitto -l m -l lua
DEFINES = -D_DEBUG
DEBUG_START = lua luamqtt_test.lua
CC = gcc
CCFLAGS = -fPIC -std=c99
CXX = g++
CXXFLAGS = -fPIC
LD = ld
LDFLAGS = -shared
#********************************************************
# WORK VARIABLES
DEPENDS = $(wildcard $(OBJ_DIR)/*.d)
OBJECTS = $(OBJ_DIR)/*.o
CCSRC = $(wildcard $(SRC_DIR)/*.c)
CCOBJ = $(CCSRC:$(SRC_DIR)/%.c=$(OBJ_DIR)/%.o)
CXXSRC = $(wildcard $(SRC_DIR)/*.cpp)
CXXOBJ = $(CXXSRC:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
#********************************************************
# MAIN TARGETS
.PHONY: clean
all: $(OUTLIB)
rebuild: clean all
debug: $(OUTLIB)
$(DEBUG_START)
clean:
@rm -rf $(OBJECTS) $(DEPENDS) $(OUTLIB)
@echo [ MAKE ] CLEAN FINISH
#********************************************************
# DEPENDS OF MAIN TARGETS
$(OUTLIB): $(CCOBJ) $(CXXOBJ)
@echo [ LD ] BUILDING $(OUTLIB)
@$(LD) $(LDFLAGS) -soname $(OUTLIB) -o $(OUTLIB) $(LDLIBS) $(OBJECTS)
@echo [ MAKE ] FINISH
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.c
@echo [ CC ] COMPILING $<
@$(CC) -MMD $(DEFINES) -c $(CCFLAGS) -I $(INC_DIR) -o $@ $<
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
@echo [ CXX ] COMPILING $<
@$(CXX) -MMD $(DEFINES) -c $(CXXFLAGS) -I $(INC_DIR) -o $@ $<
include $(DEPENDS)
I am DX168B and this is my favourite forum on internet!
- Реклама
DX168B, Я их вообще не создаю.
В IDE создаю проект, пишу код, жму F7 - собралось. Жму F11 - прошивка в МК.
В IDE создаю проект, пишу код, жму F7 - собралось. Жму F11 - прошивка в МК.
На каком-нибудь сервере (причем, на железе, подобном Raspberry Pi), через SSH особо со средой не поработаешь.
Конечно, такие среды, как Visual Studio Code содержат различные инструменты для облегчения такой работы.
Однако, даже они требуют знаний из области DevOps (то есть, Makefile и прочий скриптинг для сборки и деплоинга)
Собственно, приведенный выше makefile писался как раз для удаленной сборки и отладки компонента на целевой железке.
Даже в случае МК и ПЛИС были случаи на практике, когда прошиваемая железка была на стенде в соседнем помещении, программатор подключен к одноплатному ПК, на котором код собирался и шился в железо удаленно.
Конечно, такие среды, как Visual Studio Code содержат различные инструменты для облегчения такой работы.
Однако, даже они требуют знаний из области DevOps (то есть, Makefile и прочий скриптинг для сборки и деплоинга)
Собственно, приведенный выше makefile писался как раз для удаленной сборки и отладки компонента на целевой железке.
Даже в случае МК и ПЛИС были случаи на практике, когда прошиваемая железка была на стенде в соседнем помещении, программатор подключен к одноплатному ПК, на котором код собирался и шился в железо удаленно.
I am DX168B and this is my favourite forum on internet!
DX168B, ну вообще то тема создана в форуме AVR.
И практически все популярные IDE для АВРок "из коробки" позволяют откомпилить проект без ручного makefile
Ну вот серьезно...
Случаи железки в другом помещении - это частный случай. И далеко не типичный.
У меня тоже умный дом со своей сеткой. И кучкой устройств по всей квартире.
Там бутлоадеры, что в АВРках, что в СТМках. И отправка прошивки туда - не вставая со стула. Нужен только хекс.
А компилится это всё в той же IDE.
--
Тут сколько людей, столько и мнений. Кого то винда устраивает, а кому то линукс мать-отец и любовница в одном флаконе.
Кто то любит все конфиги писать руками, а кому то достаточно написать printf(hello world) и нажать F7...
Да, конфиги вручную дают ощущение более полного контроля над проектом. Может быть, да. Какие то твики не всегда можно из свойств проекта накликать мышкой. но это мелочи и частности. особенно для Hello, world.
Как то мы плавно от вопроса про инклюдники уплываем в бухту холиваров.
И практически все популярные IDE для АВРок "из коробки" позволяют откомпилить проект без ручного makefile
Ну вот серьезно...
Случаи железки в другом помещении - это частный случай. И далеко не типичный.
У меня тоже умный дом со своей сеткой. И кучкой устройств по всей квартире.
Там бутлоадеры, что в АВРках, что в СТМках. И отправка прошивки туда - не вставая со стула. Нужен только хекс.
А компилится это всё в той же IDE.
--
Тут сколько людей, столько и мнений. Кого то винда устраивает, а кому то линукс мать-отец и любовница в одном флаконе.
Кто то любит все конфиги писать руками, а кому то достаточно написать printf(hello world) и нажать F7...
Да, конфиги вручную дают ощущение более полного контроля над проектом. Может быть, да. Какие то твики не всегда можно из свойств проекта накликать мышкой. но это мелочи и частности. особенно для Hello, world.
Как то мы плавно от вопроса про инклюдники уплываем в бухту холиваров.
надо как-то иначе формулировать... например, от шторма инклюдников в бухту холиваров... или от берега темы в тайфун холиваров... а то конец фразы с началом не вяжетсяGoldenAndy писал(а):Как то мы плавно от вопроса про инклюдники уплываем в бухту холиваров.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
ARV, ну поскольку инклюдники идут один за одним - шторм подходит





