Через командную строку компилятора можно передать препроцессору предопределённые символы. Таким образом, имея несколько конфигураций сборки, мы можем сообщить коду какая из них собирается. Если вариантами сбоки управляет makefile, то в нём эти ключи и прописываются.
Только вот передать можно только факт определения символа, без значения.
Последний раз редактировалось VladislavS Вс янв 28, 2024 09:18:38, всего редактировалось 1 раз.
Почему не очень? Конфигурации сборки задаются в свойствах проекта. Не править же каждый раз руками код, если надо собрать конкретную конфигурацию. При управлении проектом через makefile всё в нём и задаётся.
Мы говорим конкретно о частоте осциллятора. Поскольку изменение частоты требует правки в разных частях кода, то наиболее логично вынести определение в хедер. Ну и подобное управление через мейкфайл полагаю идиотским на том основании, что код должен быть самодостаточным по максимуму. Делать его зависимым от ключей компиляции - значит создавать проблемы с переносимостью и сопровождением.
Мы говорим конкретно о частоте осциллятора. Поскольку изменение частоты требует правки в разных частях кода, то наиболее логично вынести определение в хедер.
И каждый раз его править? Вместо того чтобы просто собрать конфигурацию с нужным кварцем.
Ну и подобное управление через мейкфайл полагаю идиотским на том основании, что код должен быть самодостаточным по максимуму.
Складывается впечатление, что вы никогда не использовали конфигурации проекта, например, для сборки отладочной версии. Как кроме передачи определений препроцессора сказать коду, что в отладочной версии он что-то должен по другому делать? Вот, например, одним махом включается вывод всей отладочной информации.
Итого: проект собирается тремя разыми компиляторами (IAR, ARMCompiler и GCC) в трёх разных IDE и просто make. Никаких проблем переносимости и никаких правок исходного кода. Так что, вылезайте из танка, программируйте повзрослому.
Все о чем вы говорите, мне известно. Ничего нового. Такое ощущение, что вы не желаете понять собеседника. Переносимость и поддержка подразумевает возможность ДРУГОГО человека разобрать ваш код и продолжить работу с ним. Якобы "взрослые" изыски делают этот процесс зависимым от квалификации этого другого человека. И таки я не программист, а радиоинженер. И создавать себе и другим проблемы полагаю глупым. Ну и по теме. Ничто не мешает автору вопроса просто определить литерал дефайном. И библиотеки тут вообще не причем. Мейк ничего сверх дефайна не даст.
Именно поэтому не стоит делать заключения какой способ "идиотский", а какой нет, придумывать проблемы переносимости и каких-то мифических других людей. Выбрать конфигурацию в свойствах проекта нормально, править для этого исходники - зашквар.
Все с точностью до наоборот. Правят не код. Правят хедер. А точнее - просто управляют минимальным списком дефайнов. В отличии от настроек среды или компилятора, хедер является частью проекта. Он читаем и адекватен. В отличии от. Я беру исходник чужого проекта и он мне должен быть понятен и самодостаточен. Тогда нет необходимости таскать повсюду настройки среды в виде мейка. Достаточно только исходного текста.
А точнее - просто управляют минимальным списком дефайнов.
Вот первый попавшийся очень простой проект открыл. В нём 6 единиц трансляции и порядка 50 заголовочных файлов, не считая стандартных. И заголовочные файлы содержат примерно 80% кода. В каком из них искать заветный дефайн? В настройках проекта всё в одном месте.Спойлер
В отличии от настроек среды или компилятора, хедер является частью проекта.
Ещё одна новость. Если в программе больше одной единицы трансляции, то проект просто обязан содержать информацию как его собрать: список файлов, линкерскрипт, настройки компилятора, пути поиска подключаемых файлов и т.д. Иначе не только тот мифический другой человек, но и вы сами не сможете его собрать. Вот что такое проект.
Я беру исходник чужого проекта и он мне должен быть понятен и самодостаточен. Тогда нет необходимости таскать повсюду настройки среды в виде мейка. Достаточно только исходного текста.
Так не бывает. Не сможете вы его скомпилировать без настроек. Спойлер
Это все пустой разговор для дилетантов. Обозначить хедер с настройками элементарно. Это main.h И не нужно ничего искать. Прямо в его начале список всех опций проекта. И чем провинился кварц? У меня список этих опций строк на 50. И каждой строке нужен коммент на пару строк. Иначе потом не разберешься. Мне эти комменты в мейк писать? Зачем? Чтобы какой то сторонний программер, который никогда не получит этот код по совершенно техническим причинам получил внутреннее удовлетворение? Не катит, извините. ЗЫ. И не нужно про плюсы. Мы люди простые. Нам достаточно чистого Си. Особенно для радиотехнических проектов.
Конечно не смогу. Если код подразумевает эти настройки. А если не подразумевает, то смогу. Осталось задать логичный вопрос. Кто писал такой код? С настройками кода в мейке...
Посмотрел лог, вот сколько параметров Visual Studio передаёт компилятору. И это ещё лайтовенько, без директив препроцессора. Все они из настроек проекта взяты. Имея только исходники ой как долго вы будете собирать... А ещё такую же пачку, если не больше, линкеру.
вот сколько параметров Visual Studio передаёт компилятору.
У вас профессиональная деформация. Тут ветка про Микрочип. Более того, вопрос поднят даже не про АРМы. К чему этот треп про VS? Одно дело, когда речь идет о дебаге на фоне кода в продакшен и совсем иное - совать в мейк обычные дефайны. Не путайте теплое с мягким в эмбедде внутрисхемного уровня.
Одно дело, когда речь идет о дебаге на фоне кода в продакшен и совсем иное - совать в мейк обычные дефайны.
Это обычное управление проектом. Если проект управляется мэйкфайлом, то в нём всё и задаётся. Представьте ситуацию, что у вас есть несколько конфигураций проекта с разными кварцами. Допустим, вы исправили кусок кода работы c UART (или чем либо на ваш выбор). Для сборки этих конфигураций с новым исходным кодом не надо править исходники, а просто запустить make с параметром. Либо в IDE нажать кнопку build на нужных конфигурациях. Либо вообще на серверах сборки собирают. Так делают программисты. А вот радиогубители лазят по заголовочным файлам и правят их туда-сюда.
Абисняю. Это такой зверь, когда за очень грамотным, не хуже вас, программистом, приходится переписывать почти весь проект. Просто потому, что он не радиогубитель, а тупо погромист. И ничего не понимает в радиотехнике. Но у него все очень правильно и традиционно с точки зрения его самого. Правда эта правильность и традиционность никак не способствует получению товарного изделия. Это так бывает. И зависит от места занимаемого вычислительной системой в изделии. Ну и от организации и структуры R&D. Чем разгребать чужой и красивый код, лучше написать свой. По своему красивый и не менее правильный. ЗЫ. У меня весьма богатый опыт взаимодействия с программистами. Поверьте мне.
Не просто относится, а самым непосредственным образом. Ибо автор вопроса вообще не понимает места определения того, что он пытается найти. Вы, вместо того, чтобы указать где это искать, пытаетесь найти ему место, куда это писать. Да по барабану куда писать. Но тому, кто не знает где искать, писать это в конфигурацию проекта нельзя по определению. И это уже не зависит от вкусов.
Сейчас этот форум просматривают: Google [Bot] и гости: 10
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения