2017-02-13 12 views
0

У меня есть следующая проблема:Propagate определяет на другой Исходный_файл или установить флаг компилятора в targetlink

В рамках нашей (собственная) тестовой среды, мы используем C для отображения разработанного C-кода для Simulink/targetlink поэтому мы может скомпилировать его как S-функцию. Все это скомпилировано с помощью visual-c (++) 2010

В коде разработки есть функция, доступная только тогда, когда определенный флаг/определение задается с помощью #ifdef (поскольку это функция, которая дает тестер внутреннего доступа к некоторым данным, которые не должны быть доступны в производственном коде).

  • Я попытался поднять флаг -DFLAGNAME в параметрах targetlink. Это не помогает.
  • Я использовал #define FLAGNAME в моем картографическом коде, это помогло до сих пор, что предупреждение об неизвестной функции исчезло (так что файл заголовка принял флаг), но я все еще получаю сообщение об ошибке во время ссылки, что он не может разрешить внешний символ

Я не могу понять, как получить доступ к функции без изменения кода разработки. Ниже я попытаюсь дать пример:

dev.h

#ifdef FLAGNAME 
int* access(void); 
#endif 

dev.c

#include "dev.h" 
#ifdef FLAGNAME 
int* access(void){ 
return &data; //data has filescope 
} 
#endif 

customCode.c (отображение кода из targetlink)

#define FLAGNAME 
#include "dev.h" 
int main() 
{ 
    int* bar = access(); 
    // do other things 
} 

У меня есть доступ ко всем другим функциям в dev.c, и конкретная ошибка:

customCode.obj : error LNK2019: unresolved external symbol access referenced in function main

Редактировать: Я нашел пакет, в котором параметры компиляции сохранены и изменены соответствующим образом, это более или менее было решением проблемы. Но вопрос еще в том, можно ли распространить определение на другой исходный файл, потому что это сделает переносимое решение.

+1

Вы компилируете 'dev.c' с' -DFLAGNAME'? Ошибка привязки настоятельно указывает на то, что вы этого не сделали. В общем случае такие флаги для условной компиляции должны быть установлены глобально. – StoryTeller

+0

@StoryTeller Поскольку у меня нет прямого доступа к компилятору (только через targetlink), единственная возможность предоставить параметр компиляции - это окно опции в целевой ссылке. Там опция дается, как указано.Проблема может заключаться в том, что сборка S-Function (которая находится в другом окне) может не использовать эти параметры, но я не знаю, как заставить ее использовать какие-либо параметры вообще. –

+0

@StoryTeller Я только что вспомнил, что есть пакетный скрипт где-то в целевой ссылке. Я посмотрю на него и, возможно, найду что-нибудь там. –

ответ

0

В папке:

C: \ Users * USERNAME * \ AppData \ Roaming \ MathWorks \ MATLAB * MATLABVERSION *

является файл mexopts.bat

есть строка, которая начинается с set COMPFLAGS= (строка 35 в моем случае), после чего могут быть определены все флагов компилятора.

Там могут быть подняты необходимые флаги.

В отношении комментария StoryTellers в вопросе невозможно передать определение из одного блока компиляции в другое.