2015-04-14 3 views
0

Я пытаюсь создать файл в скрипте. Файл C, который должен быть помечен, генерируется на одном из предыдущих шагов скрипта перед его mexed.ошибка с командой mex -g (без оптимизации)

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

mex (strcat(component_name,'_s_func','.c')); 

, но когда я добавляю в той же строке ниже с

mex -g (strcat(component_name,'_s_func','.c')); 

это дает мне ошибку

C:\PROGRA~2\MATLAB~1\BIN\MEX.PL: Error: '(strcat(component_name,_s_func,.c))' not found.

Любая идея, почему ее не в состоянии найти тот же файл, используя -g время он может найти его при использовании без опции -g?

ответ

3

Проблемы с вашим утверждением, что с синтаксисом

mex -g [...] 

MATLAB предполагает, что вы вызываете mex с строковыми аргументами '-g' и '[...]' поэтому он предполагает, что ваш файл называется (strcat(component_name,'_s_func','.c')) и не выполняет команду.

Вы можете использовать решение, которое вы отправили, с eval, так как вы снова называете это строками '-g' и 'filename.c'. Другой возможностью было бы использовать синтаксис

mex('-g',strcat(component_name,'_s_func','.c')); 

, потому что таким образом команда strcat действительно выполняется перед вызовом mex.

-

Это такое же поведение, как, например, с clear. Как вы, возможно, знаете, следующие утверждения равны:

clear a b c 
clear('a','b','c'); 
+1

Да к функциональному синтаксису. Использование eval здесь глупо. – chappjc

+0

, но я до сих пор не понимаю, почему не eval. почему ваше решение лучше, чем оценка? почему оба не одинаковы. и спасибо за эту информацию. я принял ваш ответ уже –

+1

@ArunKumar Потому что 'mex' сам по себе является функцией, поэтому вам просто нужно называть его как функцию. Это намного легче понять и меньше подвергнуть ошибкам, а затем построить строку для выполнения с помощью 'eval'. Просто мое мнение. – chappjc

-2

хорошо его можно сделать это с помощью Eval команды

file_name=(strcat(component_name,'_s_func','.c')); 
eval(['mex -g ',file_name]);