2014-01-22 7 views
0

позволяет сказать, что моя структура папок что-то вроде этого ..Создание среды сборки для проекта «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, то приложение должно создать приложение с файлами драйверов в MICRO_CONTROLLER_2

Пожалуйста, дайте мне знать, если шаблон для достижения вышеуказанного.

ответ

0

Как правило, вы должны указать 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. Если вы используете среду разработки для разработки, обычно существует опция проекта для предпроцессорных директив. Здесь вы найдете define MICRO_CONTROLLER_1. Затем вы можете создавать разные «конфигурации» - по одному для каждого из микроконтроллеров, на которые вы нацеливаете.

0

Это может работать только в том случае, если в каталоги включены только файлы. #define - это препроцессорная директива. Если в каталогах есть исходные файлы, вам необходимо решить их на уровне системы сборки, а не на уровне препроцессора.

Предполагая, что это просто включить файлы, вы бы просто #include SELECT_MICRO # "Interface.h"

1

Вы можете экспортировать этот конкретный путь к папке, которую вы хотите создать и указать путь к исполняемому файлу. Вы можете получить дополнительную информацию. в этой теме.

How I could add dir to $PATH in Makefile?

Или просто поддерживать различную Makefiles сделать различные сборки и использовать сделать -f для выполнения этого конкретного Makefile.

Надеюсь, это то, что вы, наконец, хотите выполнить.