이 드디어 해낸 것입니다. 또는 실행 파일 자체에 내장 체크를 구현할 수 있습니다. (컴파일 후 특수 매개 변수로 호출하면 사용 가능한 도구 상자에 대한 자체 검사가 시작됩니다.) 어느 경우이든 필요한 도구 상자의 이름이 필요합니다.
도구 상자 목록을 생성하는 데 여러 가지 방법을 시도했습니다. 즉, Matlab에서 프로그램을 실행 한 다음 라이센스를 입력하면 ('inuse') 신뢰할 수 없습니다. depfun()은 많은 방법으로 내려갑니다. mydepfun()과 fdep()는 충분히 강하하지 않습니다.
mydepfun() 및 fdep() 문제는 \ toolbox \ shared 폴더로 내려 가지 않는다고 생각합니다. 그래서 토비아스 Kienzler (link to the original sources)에서 mydepfun()을 가져다가 그것을 수정 :
function [list,callers,tboxes_found] = i_scan(f)
func = i_function_name(f);
[list,~,~,~,~,~,callers,~] = depfun(func,'-toponly','-quiet');
toolboxroot = fullfile(matlabroot,'toolbox');
sharedroot = strcat(toolboxroot, filesep, 'shared');
intoolbox = strncmpi(list,toolboxroot,numel(toolboxroot));
inshared = strncmpi(list,sharedroot, numel(sharedroot));
tboxes_found = list(intoolbox & ~inshared);
tboxes_found = regexpi(tboxes_found, '[\\/]toolbox[\\/](.+?)[\\/]', 'tokens');
tboxes_found = cellfun(@(cfun) cfun{1}, tboxes_found);
list = list(~intoolbox | inshared);
callers = callers(~intoolbox | inshared);
for jj = 1:numel(list)
c = callers{jj};
cs = cell(numel(c),1);
for kk = 1:numel(c)
cs{kk} = list{c(kk)};
end;
callers{jj} = cs;
end;
이 방법 i_scan (F)는 도구 상자를 반환하고도 공유 \ 도구 상자 \로 내려된다. mydepfun의 주요 기능은() 단지 도구 상자를 수집 목록에
function [filelist,callers,toolboxes] = mydepfun(fn,recursive)
.
.
toolboxes = {};
[filelist,callers,tboxes_found] = i_scan(foundfile);
toolboxes = [toolboxes; tboxes_found];
.
.
[newlist,newcallers,tboxes_found] = i_scan(toscan{1});
toolboxes = [toolboxes; tboxes_found];
.
.
toolboxes = unique(toolboxes);
도구 상자는 우리의 소스 코드를 사용하는 사람입니다. 수정 된 mydepfun()은 정상적으로 작동하는 것 같습니다. (eval(), 함수 핸들, 콜백 등과 같이 런타임 중에 만 해석되는 요소로 인한 일반적인 문제는 제외)
그리고 mydepfun()과 같이 보았던 의존성있는 워커는 depfun .depfun()은 경로에없는 모든 소스 코드를 자동으로 무시하기 때문에 신뢰성이 없습니다 (이 경우 prob_files가 비어 있음). 따라서 Matlab 경로가 올바르게 설정되어 있어야합니다. (Matlab이 다른 위치에서 같은 이름으로 예기치 않게 기능을 수행 할 수 있기 때문에 문제가 발생합니다.) 결국 내 빌드 과정을보다 안정적으로 만들 수있는 좋은 방법이라고 생각합니다. 난 그냥 매스 웍스 포럼에서 다른 힌트를 얻었다 Zweikeks
이 이미 데 도움이, 감사 matlabgui. 그러나 고정 된 도구 상자 집합을 지정해야합니다. 개발자가 다른 도구 상자가 필요한 방식으로 소스를 변경하는 경우 컴파일이 예고없이 다시 실패 할 수 있습니다. – Zweikeks
사실입니다. 당신은 모든 종속 소스 파일을 반복 할 수 있고 그들이 어떤 도구 상자에서 왔는지 볼 수 있습니다. – matlabgui