@Nickellick

Как установить порядок компиляции файлов в Atmel Studio?

Допустим, у меня есть файл main.c, в котором я пишу:
#define SSEG_DIG_PORT PORTB
#include "include/led_display.h"


Внутри файла led_display.h написано следующее:
#ifndef SSEG_DIG_PORT
	#define SSEG_DIG_PORT PORTA
	#warning "SSEG_DIG_PORT is not defined! Using PORTA instead"
#endif /* SSEG_DIG_PORT */


В итоге при компиляции я получаю этот warning, и, само собой, устанавливаю не тот порт. Будто бы компилятор сперва отдельно от всего, игнорируя что написано в main.c, отдельно компилирует led_display.c
Что в такой ситуации делать? Только писать свой makefile? Для примера, если использовать те же задержки из util/delay.h, то там таких проблем нет. Т.е. main.c выглядит следующим образом:
#define F_CPU 16000000UL
#include <util/delay.h>


И в таком случае мы не получаем никаких warning'ов, хотя если не определить макрос F_CPU, то компилятор предупредит, что из-за этого у нас могут быть проблемы

P.S. Работаю из Atmel Studio 7
  • Вопрос задан
  • 58 просмотров
Решения вопроса 1
@res2001
Developer, ex-admin
Непосредственно к Atmel Studio это не относится. Это особенность работы С/С++ компиляторов.

Будто бы компилятор сперва отдельно от всего, игнорируя что написано в main.c, отдельно компилирует led_display.c

В корень зрите. Каждый файл исходных кодов в Си и С++ компилируется отдельно от других. Это называется единицей трансляции.
Объединяются объектные файлы только на этапе линковки. В процессе сборки исполняемого файла компиляция исходников и линковка объектных файлов разделены.

Макросы, которые должны быть общими для всех исходников помещайте в отдельные хедеры и включайте эти хедеры в соответствующие файлы исходных кодов.
Как вариант макросы можно задавать глобально опцией компиляции для всех файлов в проекте. Можно через makefile или опциями в проекте в IDE.
В вашем случае можно просто этот макрос поместить в led_display.h.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
АКМЭ сервис Санкт-Петербург
от 120 000 ₽
Кликнет Санкт-Петербург
До 150 000 ₽
Технология Екатеринбург
от 100 000 до 200 000 ₽