Создайте среду сборки для проекта "C", чтобы динамически выбирать папки во время компиляции
Допустим, моя структура папок выглядит примерно так...
+ - Приложение
|
+ - MICRO_CONTROLLER_1
|
+ - MICRO_CONTROLLER_2
|
+ - MICRO_CONTROLLER_3
и у меня есть переключатель компиляции ( SELECT_MICRO), установленный на #define SELECT_MICRO == MICRO_CONTROLLER_1, тогда мой проект должен создать приложение с файлами драйверов в MICRO_CONTROLLER_1, аналогично, если #define SELECT_MICRO == MICRO_CONTROLLER_2_приложение файлов в приложении должно быть в приложении
Пожалуйста, дайте мне знать, если есть шаблон для достижения вышеуказанного.
3 ответа
Вы можете экспортировать этот конкретный путь к папке, которую хотите создать, и указать путь к исполняемому файлу. Вы можете получить дополнительную информацию. в этой теме.
Как я могу добавить dir к $PATH в Makefile?
Или просто поддерживайте разные Make-файлы для создания разных сборок и используйте make -f для запуска этого конкретного make-файла.
Я надеюсь, что это то, что вы, наконец, хотите выполнить.
Это может работать, только если каталоги содержат только файлы. #define - это директива препроцессора. Если у каталогов есть исходные файлы, вам нужно решить это на уровне системы сборки, а не на уровне препроцессора.
Предполагая, что это просто включить файлы, вы просто #include SELECT_MICRO # "Interface.h"
Как правило, вы бы define
определения вашего препроцессора, чтобы он указывал препроцессору включать, например, только блоки кода MICRO_CONTROLLER_1 и игнорировать все остальное.
Что-то вроде следующего должно быть достаточно:
#if defined(MICRO_CONTROLLER_1)
// Block of code that is only available to MICRO_CONTROLLER_1
#elif defined(MICRO_CONTROLLER_2)
// ...
// All other microcontrollers you are supporting would follow this structure.
#endif
Тогда вам нужно будет define
MICRO_CONTROLLER_1. Если вы используете IDE для разработки, обычно есть опция проекта для директив препроцессора. Это где вы бы define
MICRO_CONTROLLER_1. Затем вы можете создать различные "конфигурации" - по одной для каждого из целевых микроконтроллеров.