Ceedling не удается имитировать заголовок

#c #cmock #ceedling

#c #cmock #ceedling

Вопрос:

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

Заголовок начинается со следующего:

 #if defined(ICM42600)
#define ICM_WHOAMI ICM42600_WHOAMI
#elif defined(ICM42602)
#define ICM_WHOAMI ICM42602_WHOAMI
#elif defined(ICM42605)
#define ICM_WHOAMI ICM42605_WHOAMI
#elif defined(ICM42622)
#define ICM_WHOAMI ICM42622_WHOAMI
#elif defined(ICM42686)
#define ICM_WHOAMI ICM42686_WHOAMI
#elif defined(ICM42688)
#define ICM_WHOAMI ICM42688_WHOAMI
#elif defined(ICM42608)
#define ICM_WHOAMI ICM42608_WHOAMI
#elif defined(IIM42623)
#define ICM_WHOAMI IIM42623_WHOAMI
#elif defined(IIM42624)
#define ICM_WHOAMI IIM42624_WHOAMI
#elif defined(IIM42625)
#define ICM_WHOAMI IIM42625_WHOAMI
#elif defined(ICM40608)
#define ICM_WHOAMI ICM40608_WHOAMI
#else
#error "Please define which ICM variant is targeted. Possible values: ICM42600, ICM42602, ICM42605, ICM42686, ICM42688, ICM42622, ICM42608, ICM4068"
#endif
 

и я пытаюсь высмеять это так:

 #define ICM42600 1
#include "mock_Icm426xxDefs.h"
 

Тем не менее, я продолжаю получать следующую ошибку при попытке запустить тесты ceedling:

 ----------------------------
Generating include list for Icm426xxDefs.h...
build/temp/_Icm426xxDefs.h:74:2: error: #error "Please define which ICM variant is targeted. Possible values: ICM42600, ICM42602, ICM42605, ICM42686, ICM42688, ICM42622, ICM42608, ICM4068"
 #error "Please define which ICM variant is targeted. Possible values: ICM42600, ICM42602, ICM42605, ICM42686, ICM42688, ICM42622, ICM42608, ICM4068"
  ^~~~~```

I have no idea how to deal with this. I was under the impression that ceedling would automatically mock headers, and there's no error saying what I can do to resolve this.
 

Ответ №1:

Вывод #error сообщения означает, что ни одно из (других) определений ICM_WHOAMI не использовалось.

Почему #define перед #include тем, как не было видно, потребуется другая информация, которую вы не предоставили

Ответ №2:

У меня также были проблемы с определениями, которые не были переданы включенным файлам. Попробуйте передать define с опцией -D непосредственно компилятору и компоновщику, добавив их в project.yml:

:флаги : :тест: : компиляция : :: -D ICM42600 :ссылка: :: -D ICM42600