주요 콘텐츠

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

codegen

MATLAB 코드에서 C/C++ 코드 생성

설명

codegen options function 은 MATLAB® 함수에서 C 코드 또는 C++ 코드를 생성하고 이 생성 코드를 빌드합니다. 이 구문은 다음 조건 중 하나에 해당하는 경우에 적용됩니다.

  • 함수에 입력 인수가 없습니다.

  • 함수에 모든 입력 인수의 유형과 크기를 지정하는 arguments 블록이 하나 이상 포함되어 있습니다.

코드 생성 구성 객체와 같은 설정을 지정하려면 options 인수를 사용합니다. 구성 객체는 빌드 유형(MEX, lib, dll 또는 exe)과 코드 생성 파라미터를 제어합니다. 구성 객체의 생성과 사용에 대한 내용은 Configure Code Generation and Build Settings 항목과 coder.config 항목, 그리고 구성 객체 도움말 페이지에서 coder.CodeConfig, coder.MexCodeConfig, coder.EmbeddedCodeConfig를 참조하십시오.

예제

codegen options function -args {func_inputs}func_inputs 유형의 입력값을 사용하여 MATLAB 함수에서 C 코드 또는 C++ 코드를 생성하고 이 생성 코드를 빌드합니다. 코드 생성 구성 객체와 같은 설정을 지정하려면 options 인수를 사용합니다. 구성 객체는 빌드 유형(MEX, lib, dll 또는 exe)과 코드 생성 파라미터를 제어합니다. 구성 객체의 생성과 사용에 대한 내용은 Configure Code Generation and Build Settings 항목과 coder.config 항목, 그리고 구성 객체 도움말 페이지에서 coder.CodeConfig, coder.MexCodeConfig, coder.EmbeddedCodeConfig를 참조하십시오.

함수가 입력값을 갖지 않는다면 그 함수에 특정된 -args {func_inputs} 옵션을 생략하십시오.

예제

codegen options files function -args {func_inputs}는 외부 files에 지정된 사용자 지정 소스 코드를 사용하는 MATLAB 함수에서 C/C++ 코드를 생성합니다. 자세한 내용은 Call Custom C/C++ Code from the Generated Code 항목과 Configure Build for External C/C++ Code 항목을 참조하십시오.

codegen options files function -args {func_inputs} -nargout number_args는 MATLAB 함수에서 C/C++ 코드를 생성하며, 이때 생성된 C/C++ 함수 코드에서의 출력 인수 개수를 제어합니다. 파일 인수와 옵션 인수는 선택 사항입니다. MATLAB 함수의 모든 출력값이 필요한 경우가 아니라면 -nargout 옵션을 사용합니다. 자세한 내용은 Specify Number of Input or Output Arguments to Entry-Point Functions 항목을 참조하십시오.

codegen options files function1 -args {func1_inputs} ... functionN -args {funcN_inputs}는 여러 개의 MATLAB 함수에서 C/C++ 코드를 생성합니다. 각 함수마다 함수 이름 뒤에 입력 인수를 별도로 작성합니다. 또한 각 함수에 -nargout 옵션도 사용할 수 있습니다. 코드 생성의 시작점이 되는 함수를 진입점 함수라고 합니다. 자세한 내용은 Generate Code for Multiple Entry-Point Functions 항목을 참조하십시오.

codegen options files function -args {func_inputs1} ... -args {func_inputsN}-args에 의해 지정된 여러 개의 유형 시그니처를 입력 인수로 받는 코드를 생성합니다. MEX 타깃의 경우, 지정된 모든 시그니처를 받는 하나의 MEX 함수가 생성됩니다. 그러나 독립 실행형 타깃의 경우, 각 시그니처마다 C/C++ 진입점 함수가 생성됩니다. 코드 생성 구성 객체와 파라미터 같은 설정을 지정하려면 options 인수를 사용합니다. 자세한 내용은 Generate Code for Functions with Multiple Signatures 항목을 참조하십시오.

예제

codegen projectMATLAB Coder™ 프로젝트 파일(예: test.coderprj)에서 코드를 생성합니다.

예제

모두 축소

두 입력 인수 uv의 합을 반환하는 MATLAB 함수 mcadd를 작성합니다. arguments 블록을 사용하여 u는 double형 실수 값으로 구성된 1×4 행 벡터이고 v는 double형의 실수형 스칼라임을 선언합니다.

function y = mcadd(u,v) %#codegen
% The directive %#codegen indicates that the function
% is intended for code generation
arguments
    u (1,4) double
    v (1,1) double
end
y = u + v;
end

MATLAB 명령줄에서 다음 codegen 명령을 실행합니다.

codegen mcadd

코드 생성기가 현재 작업 폴더에 MEX 파일 mcadd_mex를 생성합니다.

  • 빌드 타깃을 지정하지 않으면 코드 생성은 기본적으로 MEX 코드 생성으로 설정됩니다. 기본적으로 코드 생성기는 생성된 MEX 함수의 이름을 mcadd_mex로 지정합니다.

  • 특정 유형의 MEX 코드 또는 C/C++ 코드를 생성하려면 모든 입력 변수의 유형과 크기를 MATLAB 진입점 함수에 지정해야 합니다. 이 예제에서는 arguments 블록을 사용하여, 첫 번째 입력값은 double형 실수 값으로 구성된 1×4 배열이고 두 번째 입력값은 double형의 실수형 스칼라임을 선언합니다.

생성된 MEX 함수 mcadd_mex를 명령줄에서 호출합니다. mcadd_mex에 전달하는 값의 유형과 크기가 arguments 블록에 지정한 입력값 속성과 일치하도록 하십시오.

mcadd_mex([1 1 1 1],5)
ans =

     6     6     6     6

이들 입력값을 사용하여 MATLAB 함수 mcadd를 실행했을 때 동일한 출력값이 생성됩니다. 이 테스트 케이스는 mcaddmcadd_mex가 동일하게 동작한다는 것을 검증합니다.

두 값의 합을 반환하는 MATLAB 함수 mcadd를 작성합니다.

function y = mcadd(u,v) %#codegen
% The directive %#codegen indicates that the function
% is intended for code generation
y = u + v;
end

MATLAB 명령줄에서 다음 codegen 명령을 실행합니다.

codegen mcadd -args {[0 0 0 0],0}

코드 생성기가 현재 작업 폴더에 MEX 파일 mcadd_mex를 생성합니다.

  • 빌드 타깃을 지정하지 않으면 코드 생성은 기본적으로 MEX 코드 생성으로 설정됩니다. 기본적으로 코드 생성기는 생성된 MEX 함수의 이름을 mcadd_mex로 지정합니다.

  • 특정 유형의 MEX 코드 또는 C/C++ 코드를 생성하려면 모든 입력 변수의 속성(클래스와 크기)을 MATLAB 진입점 함수에 지정해야 합니다. 이 예제에서는 -args 옵션을 사용하여 입력값의 샘플 값을 제공합니다. 코드 생성기는 이 샘플 값을 사용하여, 첫 번째 입력값은 double형 실수 값으로 구성된 1×4 배열이고 두 번째 입력값은 double형의 실수형 스칼라임을 확인합니다.

    이 샘플 입력값의 실제 값은 코드 생성과 관련이 없습니다. 동일한 속성(클래스와 크기)을 갖는 다른 값의 쌍도 동일한 생성 코드를 만듭니다. 진입점 함수 입력값의 유형 지정하기 항목을 참조하십시오.

생성된 MEX 함수 mcadd_mex를 명령줄에서 호출합니다. mcadd_mex에 전달하는 값의 클래스와 크기가 codegen 명령에 지정한 입력값 속성과 일치하도록 하십시오.

mcadd_mex([1 1 1 1],5)
ans =

     6     6     6     6

이들 입력값을 사용하여 MATLAB 함수 mcadd를 실행했을 때 동일한 출력값이 생성됩니다. 이 테스트 케이스는 mcaddmcadd_mex가 동일하게 동작한다는 것을 검증합니다.

두 값의 합을 반환하는 MATLAB 함수 myAdd를 작성합니다.

function y = myAdd(u,v) %#codegen
y = u + v;
end

MATLAB 명령줄에서 다음 codegen 명령을 실행합니다.

codegen -config:mex myAdd.m -args {1,2} -args {int8(2),int8(3)} -args {1:10,1:10} -report
코드 생성기가 codegen 명령에 지정된 여러 개의 시그니처를 받을 수 있는 하나의 MEX 함수 myAdd_mex를 생성합니다. 자세한 내용은 Generate Code for Functions with Multiple Signatures 항목을 참조하십시오.

두 값의 합을 반환하는 MATLAB 함수 mcadd를 작성합니다.

function y = mcadd(u,v) %#codegen
y = u + v;

C 라이브러리 폴더를 -config:lib 옵션을 사용하여 사용자 지정 폴더 mcaddlib에 생성합니다. 첫 번째 입력 유형을 부호 없는 16비트 정수로 구성된 1×4 벡터로 지정합니다. 두 번째 입력을 배정밀도 스칼라로 지정합니다.

codegen -d mcaddlib -config:lib  mcadd -args {zeros(1,4,'uint16'),0}

열린 구간 (0,1) 내의 표준 균등분포에서 난수 스칼라 값을 생성하는 MATLAB 함수 coderRand를 작성합니다.

function r = coderRand() %#codegen
r = rand();

coderRand를 호출하는 메인 C 함수 c:\myfiles\main.c를 작성합니다.

/*
** main.c
*/
#include <stdio.h>
#include <stdlib.h>
#include "coderRand.h"
#include "coderRand_initialize.h"
#include "coderRand_terminate.h"
int main()
{
    coderRand_initialize();
    printf("coderRand=%g\n", coderRand());
    coderRand_terminate();
    
    puts("Press enter to quit:");
    getchar();

    return 0;
}

코드 생성 파라미터를 메인 C 함수를 포함하도록 구성한 다음 C 실행 파일을 생성합니다.

cfg = coder.config('exe')
cfg.CustomSource = 'main.c'
cfg.CustomInclude = 'c:\myfiles'
codegen -config cfg coderRand

codegen은 C 실행 파일 coderRand.exe를 현재 폴더에 생성하고 지원 파일을 디폴트 폴더 codegen\exe\coderRand에 생성합니다.

이 예제에서는 구성 객체 coder.CodeConfig에서 메인 함수를 파라미터로 지정하는 방법을 보여줍니다. 또는 main()이 포함된 파일을 명령줄에 별도로 지정할 수도 있습니다. 소스, 객체 또는 라이브러리 파일을 사용할 수 있습니다.

자세한 예제는 Use an Example C Main in an Application 항목을 참조하십시오.

단일 입력값을 받는 MATLAB 함수를 작성합니다.

function y = halfValue(vector) %codegen
    y = 0.5 * vector;
end

coder.typeof를 사용하여 입력 유형을 최대 크기가 1×16이고 두 번째 차원이 가변 크기인 double형의 행 벡터로 정의합니다.

vectorType = coder.typeof(1, [1 16], [false true]);

C 정적 라이브러리를 생성합니다.

codegen -config:lib halfValue -args {vectorType}

하나의 입력 파라미터 u를 받고 두 개의 전역 변수 ARB를 사용하는 MATLAB 함수 use_globals를 작성합니다.

function y = use_globals(u)
%#codegen
% Turn off inlining to make 
% generated code easier to read
coder.inline('never');
global AR;
global B;
AR(1) = u(1) + B(1);
y = AR * 2;

MEX 함수를 생성합니다. 기본적으로 codegen은 현재 폴더에 이름이 use_globals_mex인 MEX 함수를 생성합니다. -globals 옵션을 사용하여 전역 변수의 속성을 명령줄에 지정합니다. -args 옵션을 사용하여 입력값 u를 double형의 실수형 스칼라로 지정합니다.

codegen -globals {'AR', ones(4), 'B', [1 2 3 4]} use_globals -args {0}

또는 MATLAB 작업 공간에서 전역 데이터를 초기화할 수 있습니다. MATLAB 프롬프트에 다음을 입력합니다.

global AR B;
AR = ones(4);
B = [1 2 3];

MEX 함수를 생성합니다.

codegen use_globals -args {0}

열거형 데이터를 사용하여 기기의 상태에 따라 LED 디스플레이를 활성화하는 함수 displayState를 작성합니다. 녹색 LED 디스플레이는 ON 상태를 나타냅니다. 빨간색 LED 디스플레이는 OFF 상태를 나타냅니다.

function led = displayState(state)
%#codegen

if state == sysMode.ON
    led = LEDcolor.GREEN;
else
    led = LEDcolor.RED;
end

열거형 LEDColor를 정의합니다. MATLAB 경로에 'LEDColor'라는 이름의 파일을 만들고 다음 내용을 작성합니다.

classdef LEDcolor < int32
    enumeration
        GREEN(1),
        RED(2),
    end
end

기존 MATLAB 열거형의 값을 사용하여 coder.EnumType 객체를 만듭니다.

열거형 sysMode를 정의합니다. MATLAB 경로에 'sysMode'라는 이름의 파일을 만들고 다음 내용을 작성합니다.

classdef sysMode < int32
  enumeration
    OFF(0)
    ON(1)
  end
end

이 열거형에서 coder.EnumType 객체를 만듭니다.

t = coder.typeof(sysMode.OFF);

displayState에 대한 MEX 함수를 생성합니다.

codegen  displayState -args {t}

두 값의 곱을 반환하는 MATLAB 함수 myMult를 작성합니다. 이 함수를 네임스페이스 +myNamespace에 저장합니다.

function out = myMult(a,b)
out = a*b;
end

명령줄에서 이 함수에 대한 코드를 생성합니다. 점 표기법을 사용하여 함수 myMult를 네임스페이스 +myNamespace에 지정합니다.

codegen myNamespace.myMult -args {0,0}

서로 다른 네임스페이스에 속하면서 이름이 동일한 진입점 함수 간에 이름이 충돌하는 것을 방지하기 위해, 코드 생성기에서 생성된 파일은 네임스페이스 이름과 진입점 함수 이름으로 시작합니다. 예를 들어, 생성된 MEX 함수를 호출하려면 다음 명령을 사용합니다.

myNamespace_myMult_mex(4,3)

고정소수점 입력값의 제곱근을 계산하는 MATLAB 언어 함수 mcsqrtfi를 작성합니다.

function y = mcsqrtfi(x) %#codegen
y = sqrt(x);

고정소수점 입력값 x에 대한 numerictype 속성과 fimath 속성을 정의하고 -config:lib 옵션을 사용하여 mcsqrtfi에 대한 C 라이브러리 코드를 생성합니다.

T = numerictype('WordLength',32, ...
                'FractionLength',23, ...
                'Signed',true)
F = fimath('SumMode','SpecifyPrecision', ...
           'SumWordLength',32, ...
           'SumFractionLength',23, ...
           'ProductMode','SpecifyPrecision', ...
           'ProductWordLength',32, ...
           'ProductFractionLength',23)
% Define a fixed-point variable with these
%  numerictype and fimath properties
myfiprops = {fi(4.0,T,F)}
codegen -config:lib mcsqrtfi -args myfiprops
codegen은 C 라이브러리와 지원 파일을 디폴트 폴더 codegen/lib/mcsqrtfi에 생성합니다.

반정밀도 입력값을 받는 MATLAB 코드에 대한 코드를 생성할 수 있습니다. 자세한 내용은 half 항목을 참조하십시오.

두 값의 합을 반환하는 MATLAB 함수 foo를 작성합니다.

function y = foo(a,b)
y = a + b;
end

MATLAB 명령줄에서 다음 codegen 명령을 실행합니다.

codegen -lang:c++ -config:lib foo -args {half(0),half(0)} -report
Code generation successful: View report

코드 생성기는 정적 C++ 라이브러리를 work\codegen\lib\foo에 생성하며, 여기서 work는 현재 작업 폴더입니다.

코드 생성 리포트를 보려면 View report를 클릭합니다. 리포트 뷰어에서, 파일 foo.cpp에 생성된 C++ 소스 코드를 검사합니다.

real16_T foo(real16_T a, real16_T b)
{
  return a + b;
}

생성된 함수 foo는 반정밀도 값을 받고 반정밀도 값을 반환합니다. C++ 반정밀도 유형 real16_T는 생성된 헤더 파일 rtwhalf.h에 정의됩니다. 클래스 real16_T+ 연산자에 대한 정의를 검사합니다.

이 예제에서 생성 코드는 반정밀도 입력값을 단정밀도로 변환하고, 단정밀도로 덧셈 연산을 수행한 다음 결과를 다시 반정밀도로 변환합니다.

이 예제에는 Fixed-Point Designer™가 필요합니다.

두 값의 합을 반환하는 MATLAB 함수 myadd를 작성합니다.

function y = myadd(u,v) %#codegen
    y = u + v;
end

myadd를 테스트하는 MATLAB 함수 myadd_test를 작성합니다.

function y = myadd_test %#codegen
    y = myadd(10,20);
end

디폴트 설정으로 coder.FixptConfig 객체 fixptcfg를 만듭니다.

fixptcfg = coder.config('fixpt');

테스트 벤치 이름을 설정합니다.

fixptcfg.TestBenchName = 'myadd_test';

코드 생성 구성 객체를 만들어 독립 실행형 C 정적 라이브러리를 생성합니다.

cfg = coder.config('lib');

-float2fixed 옵션을 사용하여 코드를 생성합니다.

codegen -float2fixed fixptcfg -config cfg myadd

두 값의 합을 반환하는 MATLAB 함수 myadd를 정의합니다.

function y = myadd(u,v) %#codegen
y = u + v;
end

정적 라이브러리를 생성하기 위한 coder.CodeConfig 객체를 만듭니다. TargetLang'C++'로 설정합니다.

cfg = coder.config('lib');
cfg.TargetLang = 'C++';

MATLAB 명령줄에서 codegen 명령을 만들어 실행합니다. myadd를 진입점 함수로 지정합니다. myadd에 대한 입력값을 차원 제한이 없는 double형의 가변 크기 행렬로 지정합니다. cfg를 코드 구성 객체로 지정합니다. -toproject 옵션을 포함시켜 codegen 명령을 이름이 myadd_project.coderprj인 상응하는 MATLAB Coder 프로젝트 파일로 변환합니다.

codegen -config cfg myadd -args {coder.typeof(1,[Inf,Inf]),coder.typeof(1,[Inf,Inf])} -toproject myadd_project.coderprj

코드 생성기가 현재 작업 폴더에 프로젝트 파일 myadd_project.coderprj를 만듭니다. -toproject 옵션을 사용하여 codegen을 실행하면 코드가 생성되지 않습니다. 프로젝트 파일만 생성됩니다.

다시 codegen 명령을 사용하여 myadd_project.coderprj에서 코드를 생성합니다.

codegen myadd_project.coderprj

코드 생성기가 C++ 정적 라이브러리 함수 myaddwork\codegen\lib\myadd 폴더에 생성합니다. 여기서 work는 사용자의 현재 작업 디렉터리입니다.

입력 인수

모두 축소

codegen 명령에서는 구성 객체가 지정한 옵션보다 개별 명령줄 옵션이 우선합니다. 명령줄 옵션이 충돌하는 경우 가장 오른쪽 옵션이 우선합니다. 옵션과 다른 구문 요소의 순서를 서로 바꿀 수 있습니다.

다음 값 중 하나 이상으로 지정됩니다.

-c

소스 코드만 생성합니다. make 명령을 호출하거나 오브젝트 코드를 빌드하지 않습니다. 예를 들어, foo 함수에 대한 정적 C/C++ 라이브러리를 생성하고 소스 코드만 생성하려면 다음 명령을 사용합니다.

codegen -config:lib -c foo
이 명령은 생성 코드를 빌드하지 않고 코드를 생성하는 MATLAB Coder 앱의 디폴트 동작을 복제합니다.

-config:dll

디폴트 구성 파라미터를 사용하여 동적 C/C++ 라이브러리를 생성합니다.

-config:exe

디폴트 구성 파라미터를 사용하여 정적 C/C++ 실행 파일을 생성합니다.

-config:lib

디폴트 구성 파라미터를 사용하여 정적 C/C++ 라이브러리를 생성합니다.

-config:mex

디폴트 구성 파라미터를 사용하여 MEX 함수를 생성합니다.

-config:single

디폴트 구성 파라미터를 사용하여 단정밀도 MATLAB 코드를 생성합니다.

Fixed-Point Designer가 필요합니다.

-config config_object

코드 생성 파라미터가 포함된 구성 객체를 지정합니다. config_object는 다음 구성 객체 중 하나입니다.

  • coder.CodeConfig — Embedded Coder®를 사용할 수 없는 경우 독립 실행형 C/C++ 라이브러리 또는 실행 파일의 생성을 위한 파라미터입니다.

    % Configuration object for a dynamic linked library
    cfg = coder.config('dll')
    % Configuration object for an executable
    cfg = coder.config('exe')
    % Configuration object for a static standalone library
    cfg = coder.config('lib')
    

  • coder.EmbeddedCodeConfig — Embedded Coder를 사용할 수 있는 경우 독립 실행형 C/C++ 라이브러리 또는 실행 파일의 생성을 위한 파라미터입니다.

    % Configuration object for a dynamic linked library
    ec_cfg = coder.config('dll')
    % Configuration object for an executable
    ec_cfg = coder.config('exe')
    % Configuration object for a static standalone library
    ec_cfg = coder.config('lib')
    

  • coder.MexCodeConfig — MEX 코드 생성을 위한 파라미터입니다.

    mex_cfg = coder.config
    % or 
    mex_cfg = coder.config('mex')

자세한 내용은 Configure Code Generation and Build Settings 항목을 참조하십시오.

-d out_folder

생성 파일을 out_folder에 지정된 절대 경로 또는 상대 경로에 저장합니다. out_folder에는 다음이 포함되지 않아야 합니다.

  • 공백. 공백이 있으면 특정 운영 체제 구성에서 코드 생성이 실패할 수 있습니다.

  • 7비트 ASCII 이외의 문자(예: 일본어 문자).

out_folder에 의해 지정된 폴더가 존재하지 않는 경우 codegen은 해당 폴더를 생성합니다.

사용자가 폴더 위치를 지정하지 않으면 codegen은 다음 디폴트 폴더에 파일을 생성합니다.

codegen/target/fcn_name. 

target은 다음일 수 있습니다.

  • MEX 함수의 경우 mex

  • 임베드 가능한 C/C++ 실행 파일의 경우 exe

  • 임베드 가능한 C/C++ 라이브러리의 경우 lib

  • C/C++ 동적 라이브러리의 경우 dll

fcn_name은 명령줄에서 첫 번째 MATLAB 함수(사전순)의 이름입니다.

이 함수는 폴더 이름에 별표(*), 물음표(?), 달러($), 파운드(#) 문자를 지원하지 않습니다.

참고

codegen은 동일한 코드에 대해 동일한 유형의 출력값을 생성할 때마다 이전 빌드에서 파일을 제거합니다. 이전 빌드의 파일을 보존하려면 다른 빌드를 시작하기 전에 해당 파일을 다른 위치에 복사하십시오.

-double2single double2single_cfg_name

coder.SingleConfig 객체 double2single_cfg_name이 지정하는 설정을 사용하여 단정밀도 MATLAB 코드를 생성합니다. codegen은 파일을 폴더 codegen/fcn_name/single에 생성합니다.

fcn_name은 진입점 함수의 이름입니다.

-config 옵션과 함께 사용되는 경우, 단정밀도 C/C++ 코드도 생성합니다. codegen은 단정밀도 파일을 폴더 codegen/target/folder_name에 생성합니다.

target은 다음일 수 있습니다.

  • MEX 함수의 경우 mex

  • 임베드 가능한 C/C++ 실행 파일의 경우 exe

  • 임베드 가능한 C/C++ 라이브러리의 경우 lib

  • C/C++ 동적 라이브러리의 경우 dll

folder_namefcn_namesinglesuffix를 결합한 것입니다.

singlesuffixcoder.SingleConfig 속성 OutputFileNameSuffix가 지정하는 접미사입니다. 이 폴더의 단정밀도 파일도 이 접미사를 갖습니다.

자세한 내용은 Generate Single-Precision MATLAB Code 항목을 참조하십시오. 네임스페이스에 포함된 진입점 함수에는 이 옵션이 지원되지 않습니다. 이 옵션을 사용하려면 Fixed-Point Designer가 있어야 합니다.

-float2fixed float2fixed_cfg_name

-config 옵션과 함께 사용되는 경우, 부동소수점에서 고정소수점으로 변환하기 위한 구성 객체 float2fixed_cfg_name이 지정하는 설정을 사용하여 고정소수점 C/C++ 코드를 생성합니다.

codegen은 파일을 폴더 codegen/target/fcn_name_fixpt에 생성합니다. target은 다음일 수 있습니다.

  • MEX 함수의 경우 mex

  • 임베드 가능한 C/C++ 실행 파일의 경우 exe

  • 임베드 가능한 C/C++ 라이브러리의 경우 lib

  • C/C++ 동적 라이브러리의 경우 dll

fcn_name은 진입점 함수의 이름입니다.

-config 옵션 없이 사용되는 경우, 부동소수점에서 고정소수점으로 변환하기 위한 구성 객체 float2fixed_cfg_name이 지정하는 설정을 사용하여 고정소수점 MATLAB 코드를 생성합니다. codegen은 파일을 폴더 codegen/fcn_name/fixpt에 생성합니다.

float2fixed_cfg_nameTestBenchName 속성을 설정해야 합니다. 예를 들면 다음과 같습니다.

fixptcfg.TestBenchName = 'myadd_test';
이 명령은 myadd_test를 부동소수점에서 고정소수점으로 변환하기 위한 구성 객체 fixptcfg에 대한 테스트 파일로 지정합니다.

자세한 내용은 Convert MATLAB Code to Fixed-Point C Code 항목을 참조하십시오. 네임스페이스에 포함된 진입점 함수에는 이 옵션이 지원되지 않습니다. 이 옵션을 사용하려면 Fixed-Point Designer가 있어야 합니다.

-g

C 컴파일러에 디버그 옵션을 사용할지 여부를 지정합니다. 디버그 모드를 활성화하면 C 컴파일러는 일부 최적화를 비활성화합니다. 컴파일은 더 빨라지지만 실행 속도는 느려질 수 있습니다.

-globals global_values

전역 변수의 이름과 초기값을 MATLAB 파일에 지정합니다.

global_values는 전역 변수 이름과 초기값으로 구성된 셀형 배열입니다. global_values의 형식은 다음과 같습니다.

{g1, init1, g2, init2, ..., gn, initn}

gn은 문자형 벡터로 지정된 전역 변수의 이름입니다. initn은 초기값입니다. 예를 들면 다음과 같습니다.

-globals {'g', 5}

또는 다음 형식을 사용합니다.

-globals {global_var, {type, initial_value}}

type은 유형 객체입니다. 유형 객체를 만들려면 coder.typeof를 사용합니다. 전역 셀형 배열 변수의 경우 이 형식을 사용해야 합니다.

codegen을 사용하여 코드를 생성하기 전에 전역 변수를 초기화합니다. -globals 옵션을 사용하여 전역 변수에 대한 초기값을 제공하지 않으면 codegen은 MATLAB 전역 작업 공간에서 해당 변수를 확인합니다. 초기값을 제공하지 않으면 codegen에서 오류가 발생합니다.

MATLAB Coder와 MATLAB은 각각 전역 데이터 복사본을 별도로 갖습니다. 일관성을 위해, 이 둘이 상호 작용할 때마다 전역 데이터를 동기화하십시오. 데이터를 동기화하지 않으면 전역 변수가 서로 달라질 수 있습니다.

전역 변수에 상수 값을 지정하려면 coder.Constant를 사용합니다. 예를 들면 다음과 같습니다.

-globals {'g', coder.Constant(v)}
g를 상수 값 v를 갖는 전역 변수로 지정합니다.

자세한 내용은 Generate Code for Global Variables 항목을 참조하십시오.

-gpuprofile

GPU 성능 분석기를 사용하여 생성 코드의 GPU 프로파일링을 활성화합니다.

GPU 성능 분석기는 생성 코드에서 CPU 활동과 GPU 활동에 대한 메트릭을 수집하는 MEX 함수 또는 SIL(Software-in-the-Loop) 실행을 실행합니다. GPU 성능 분석기는 시간 순서 타임라인 플롯이 포함된 리포트를 제공하여, 생성된 CUDA® 코드의 성능 병목 현상을 시각화, 식별, 완화하는 데 활용할 수 있습니다.

단일 명령을 사용하여 CUDA 코드를 생성하고 프로파일링을 수행하려면 -gpuprofile 옵션과 -test 옵션을 사용하여 codegen을 실행합니다.

GPU 프로파일링에는 GPU Coder™ 제품이 필요합니다. MEX가 아닌 타깃을 프로파일링하려면 Embedded Coder 제품도 필요합니다.

자세한 내용은 GPU Performance Analyzer (GPU Coder) 항목을 참조하십시오.

-I include_path

include_path를 코드 생성 경로의 시작 부분에 추가합니다. MATLAB 함수와 사용자 지정 C/C++ 파일을 검색할 때 codegen은 코드 생성 경로를 우선 검색합니다. 코드 생성 경로의 클래스는 검색하지 않습니다. 클래스는 MATLAB 검색 경로에 있어야 합니다. 자세한 내용은 Paths and File Infrastructure Setup 항목을 참조하십시오.

7비트 ASCII 이외의 문자(예: 일본어 문자)가 경로에 포함된 경우 codegen이 이 경로에서 파일을 찾지 못할 수 있습니다.

여러 경로를 포함하려면 포함시킬 각 경로의 앞에 -I를 사용합니다. 공백이 포함된 경로는 작은따옴표로 묶습니다. 예를 들면 다음과 같습니다.

-I C:\Project -I 'C:\Custom Files'
-jit

JIT(Just-in-Time) 컴파일을 사용하여 MEX 함수를 생성합니다. JIT 컴파일을 사용하면 MEX 함수 생성 속도를 높일 수 있습니다. 이 옵션은 MEX 함수 생성에만 적용됩니다. 이 옵션은 사용자 지정 코드 또는 OpenMP 라이브러리 사용과 같은 특정 코드 생성 기능이나 옵션과 호환되지 않습니다.

-lang:c

생성 코드에서 사용할 언어를 C로 지정합니다.

사용자가 타깃 언어를 지정하지 않으면 코드 생성기는 C 코드를 생성합니다.

-lang:c++

생성 코드에서 사용할 언어를 C++로 지정합니다.

-launchreport

코드 생성 리포트를 생성하고 엽니다. 이 옵션이 지정되지 않은 경우 codegen은 오류 메시지 또는 경고 메시지가 발생하거나 사용자가 -report 옵션을 지정한 경우에만 리포트를 생성합니다.

-o output_file_name

MEX 함수, C/C++ 라이브러리 또는 C/C++ 실행 파일을 생성할 때 기본 이름 output_file_name을 다음 확장자와 함께 사용합니다.

  • C/C++ 정적 라이브러리의 경우 .a 또는 .lib

  • C/C++ 실행 파일의 경우 .exe 또는 확장자 없음

  • Microsoft® Windows® 시스템 기반 C/C++ 동적 라이브러리의 경우 .dll

  • Linux® 시스템 기반 C/C++ 동적 라이브러리의 경우 .so

  • Mac 시스템 기반 C/C++ 동적 라이브러리의 경우 .dylib

  • 생성된 MEX 함수의 경우 해당 플랫폼에 따른 확장자

output_file_name은 파일 이름이거나 기존 경로를 포함할 수 있습니다. output_file_name에는 공백을 포함하면 안 됩니다. 공백이 있으면 특정 운영 체제 구성에서 코드 생성이 실패할 수 있습니다.

MEX 함수의 경우 output_file_name은 유효한 MATLAB 함수 이름이어야 합니다.

라이브러리와 실행 파일의 출력 파일 이름을 지정하지 않으면 기본 이름은 fcn_1이 됩니다. fcn_1은 명령줄에 지정된 첫 번째 MATLAB 함수의 이름입니다. MEX 함수의 경우 기본 이름은 fcn_1_mex입니다. 원래 MATLAB 함수와 MEX 함수를 실행하고 그 결과를 비교할 수 있습니다.

-O optimization_option

optimization_option의 값을 기준으로 생성 코드를 최적화합니다.

  • enable:inline — 함수 인라인 처리를 활성화합니다.

  • disable:inline — 함수 인라인 처리를 비활성화합니다. 함수 인라인 처리에 대한 자세한 내용은 Control Inlining to Fine-Tune Performance and Readability of Generated Code 항목을 참조하십시오.

  • enable:openmp — 사용 가능한 경우 OpenMP 라이브러리를 사용합니다. OpenMP 라이브러리를 사용하면 codegenparfor 루프에 대해 생성하는 MEX 함수 또는 C/C++ 코드를 다중 스레드에서 실행할 수 있습니다.

  • disable:openmp — OpenMP 라이브러리를 비활성화합니다. OpenMP를 비활성화하면, codegenparfor 루프를 for 루프로 처리하고 단일 스레드에서 실행되는 MEX 함수 또는 C/C++ 코드를 생성합니다. Control Compilation of parfor-Loops 항목을 참조하십시오.

각 최적화마다 명령줄에 -O를 한 번씩 지정하십시오.

지정하지 않으면 codegen은 최적화에 인라인 처리와 OpenMP를 사용합니다.

-package zip_file_name

독립 실행형 코드와 관련 종속 항목을 이름이 zip_file_name인 압축 ZIP 파일로 패키징합니다. 그런 다음 사용자는 이 ZIP 파일을 사용하여 코드 파일을 다른 개발 환경으로 이전하여 패키징을 풀고 재빌드할 수 있습니다.

이 패키징 기능은 packNGo 함수에서도 제공됩니다.

-preservearraydims

N차원 인덱싱을 사용하는 코드를 생성합니다. 자세한 내용은 Generate Code That Uses N-Dimensional Indexing 항목을 참조하십시오.

-profile

생성된 MEX 함수의 프로파일링을 MATLAB 프로파일러를 사용하여 활성화합니다. 자세한 내용은 Profile MEX Functions by Using MATLAB Profiler 항목을 참조하십시오.

이 옵션은 GPU Coder를 사용한 CUDA 코드 생성에는 지원되지 않습니다. 생성된 CUDA 코드를 프로파일링하려면 -gpuprofile 옵션을 사용합니다.

-report

코드 생성 리포트를 생성합니다. 이 옵션이 지정되지 않은 경우 codegen은 오류 메시지 또는 경고 메시지가 발생하거나 사용자가 -launchreport 옵션을 지정한 경우에만 리포트를 생성합니다.

Embedded Coder가 있는 경우 이 옵션은 코드 대체 리포트의 생성도 활성화합니다.

-reportinfo info

코드 생성에 대한 정보를 기본 MATLAB 작업 공간의 변수 info로 내보냅니다. Access Code Generation Report Information Programmatically 항목을 참조하십시오.

-rowmajor

행 우선 배열 레이아웃을 사용하는 코드를 생성합니다. 열 우선 레이아웃이 디폴트 값입니다. 자세한 내용은 Generate Code That Uses Row-Major Array Layout 항목을 참조하십시오.

-silent

코드 생성이 경고 없이 성공하면, 사용자가 리포트를 생성하는 경우를 포함하여 모든 메시지의 표시를 차단합니다.

경고와 오류 메시지는 표시합니다.

-singleC

단정밀도 C/C++ 코드를 생성합니다. 자세한 내용은 Generate Single-Precision C Code at the Command Line 항목을 참조하십시오.

네임스페이스에 포함된 진입점 함수에는 이 옵션이 지원되지 않습니다. 이 옵션을 사용하려면 Fixed-Point Designer가 있어야 합니다.

-std:language_standard

지정된 언어 표준과 호환되는 C/C++ 코드를 생성합니다. C++ 언어 표준은 타깃 언어가 C++인 경우에만 지원됩니다.

language_standard는 다음 값 중 하나입니다.

  • C89/90(ANSI)의 경우 c89/c90

  • C99(ISO)의 경우 c99

  • C++03(ISO)의 경우 c++03

  • C++11(ISO)의 경우 c++11

  • C++14(ISO)의 경우 c++14

  • C++17(ISO)의 경우 c++17

  • C++20(ISO)의 경우 c++20

예를 들어, C++14(ISO) 언어 표준과 호환되는 코드를 생성하려면 다음 옵션을 사용합니다.

-std:c++14

지원되는 언어 표준에 대한 자세한 내용은 Change Language Standard Used for Code Generation 항목을 참조하십시오.

-test test_file

test_file을 실행하여 원래 MATLAB 함수에 대한 호출을 MEX 함수에 대한 호출로 대체합니다. 이 옵션을 사용하는 것은 coder.runTest를 실행하는 것과 동일합니다.

이 옵션은 MEX 함수를 생성하거나 VerificationMode'SIL' 또는 'PIL'로 설정한 상태에서 구성 객체를 사용하는 경우에만 지원됩니다. VerificationMode 파라미터를 갖는 구성 객체의 생성을 위해서는 Embedded Coder 제품이 필요합니다.

-toproject project_file_name

codegen 명령을 이름이 project_file_name인 상응하는 MATLAB Coder 프로젝트 파일로 변환합니다. 그런 다음 codegen 명령을 다시 사용하거나 MATLAB Coder 앱을 사용하여 이 프로젝트 파일에서 코드를 생성할 수 있습니다.

또한 -toproject 옵션을 사용하면 불완전한 codegen 명령을 프로젝트 파일로 변환할 수도 있습니다. 예를 들어, 구성 객체 cfg에 저장된 코드 생성 파라미터만 포함된 프로젝트 파일 myProjectTemplate.coderprj를 생성하려면 다음을 실행합니다.

codegen -config cfg -toproject myProjectTemplate.coderprj
이 경우 myProjectTemplate.coderprj에는 진입점 함수의 사양이나 입력 유형의 사양이 포함되어 있지 않습니다. 따라서 이 프로젝트 파일에서 코드를 생성할 수 없습니다. myProjectTemplate.coderprjMATLAB Coder 앱에서 열고 이를 템플릿으로 사용하여 전체 프로젝트 파일을 만들면 코드 생성에 사용할 수 있습니다.

-toproject project_file_name 옵션을 사용하여 codegen을 실행하면 코드가 생성되지 않습니다. 프로젝트 파일만 생성됩니다.

Convert codegen Command to Equivalent MATLAB Coder Project 항목을 참조하십시오.

-v

세부 정보 표시 모드를 활성화하여 코드 생성 상태와 타깃 빌드 로그 메시지를 표시합니다.

-?

codegen 명령에 대한 도움말을 표시합니다.

현재 작업 폴더 또는 경로에 존재하는 함수로 지정됩니다. 현재 작업 폴더 또는 경로에 존재하면서 MATLAB 네임스페이스에 속한 함수를 지정하려면 함수 이름의 시작 부분에 네임스페이스 이름을 추가하고 그 뒤에 점을 추가합니다. MATLAB 파일이 7비트 ASCII 이외의 문자(예: 일본어 문자)가 포함된 경로에 있는 경우 codegen 명령이 해당 파일을 찾지 못할 수 있습니다.

예: codegen myAddFunction

예: codegen myNamespace.myAddFunction

앞에 있는 MATLAB 함수의 입력값 크기, 클래스, 실수/복소수 여부를 정의하는 샘플 값입니다. 셀형 배열 내 입력값 위치가 MATLAB 함수 정의의 입력 인수 위치와 일치해야 합니다. 또는 샘플 값 대신 coder.Type 객체를 제공해도 됩니다. coder.Type 객체를 만들려면 coder.typeof를 사용합니다.

함수 정의에 정의된 입력 인수의 수보다 더 적은 입력 인수를 갖는 함수를 생성하려면 원하지 않는 인수에 대한 샘플 값을 생략합니다.

자세한 내용은 진입점 함수 입력값의 유형 지정하기 항목을 참조하십시오.

예: codegen foo -args {1}

예: codegen foo2 -args {1, ones(3,5)}

예: codegen foo3 -args {1, ones(3,5), coder.typeof("hello")}

생성 코드에 포함할 사용자 지정 파일을 공백으로 구분한 목록. 옵션, 외부 파일, 함수의 지정 순서를 서로 바꿀 수 있습니다. 다음 유형의 파일을 포함시킬 수 있습니다.

  • C 파일(.c)

  • C++ 파일(.cpp)

  • 헤더 파일(.h)

  • 오브젝트 파일(.o 또는 .obj)

  • 라이브러리 (.a, .so, .dylib 또는 .lib)

위 파일이 있는 경로가 7비트 ASCII 이외의 문자(예: 일본어 문자)를 포함하는 경우 codegen 명령이 해당 파일을 찾지 못할 수 있습니다.

예: codegen foo myLib.lib

앞에 있는 MATLAB 함수에 대해 생성된 C/C++ 진입점 함수에서 출력 인수의 개수입니다. 코드 생성기는 지정된 개수의 출력 인수를 생성하며, 이때 MATLAB 함수 정의에 나타나는 순서대로 생성합니다.

예: codegen myMLfnWithThreeOuts -nargout 2

MATLAB Coder 앱에서 생성되는 프로젝트 파일입니다. 코드 생성기는 프로젝트 파일을 사용하여 진입점 함수, 입력 유형 정의, 기타 옵션을 설정합니다. 앱을 열고 프로젝트 파일을 만들거나 수정하려면 coder 함수를 사용합니다.

예: codegen foo.coderprj

제한 사항

  • MATLAB 스크립트에 대한 코드는 생성할 수 없습니다. 코드를 생성하려면 스크립트를 함수로 재작성하십시오.

  • 프라이빗 폴더나 @ 폴더는 MATLAB에서 특수한 의미를 갖기 때문에 이러한 폴더가 현재 폴더이면 코드 생성이 지원되지 않습니다. @ 폴더의 메서드와 프라이빗 폴더의 함수를 호출하는 코드는 생성할 수 있습니다.

  • 네임스페이스에 속한 진입점 함수에 대한 코드를 생성할 때는 codegen 명령이 -double2single, -float2fixed, -singleC 옵션을 지원하지 않습니다.

  • 기본적으로 코드는 폴더 codegen/target/function에 생성됩니다. MEX 함수와 실행 파일은 현재 작업 폴더에 복사됩니다.

  • 코드 생성 프로세스를 단순화하기 위해 코드 생성 명령을 별도의 스크립트로 작성할 수 있습니다. 스크립트에 함수 입력 유형과 코드 생성 옵션을 정의하십시오. 코드를 생성하려면 스크립트를 호출하십시오.

  • codegen은 동일한 코드 또는 프로젝트에 대해 동일한 유형의 출력값을 생성할 때마다 이전 빌드에서 파일을 제거합니다. 이전 빌드의 파일을 보존하려면 다른 빌드를 시작하기 전에 해당 파일을 다른 위치에 복사하십시오.

  • coder 함수를 사용하여 MATLAB Coder 앱을 열고 MATLAB Coder 프로젝트를 만드십시오. 이 앱은 MATLAB 파일 추가, 입력 파라미터 정의, 빌드 파라미터 지정을 손쉽게 수행할 수 있도록 지원하는 사용자 인터페이스를 제공합니다.

  • 함수 구문을 사용하여 codegen을 호출할 수 있습니다. codegen 인수를 문자형 벡터 또는 string형 스칼라로 지정하십시오. 예를 들면 다음과 같습니다.

    codegen('myfunction','-args',{2 3},'-report')
    
  • string형 스칼라를 입력값으로 제공하거나 codegen 인수를 string형 스칼라로 지정하려면 함수 구문을 사용하십시오. 예를 들면 다음과 같습니다.

    codegen('myfunction','-args',"mystring",'-report')
    codegen("myfunction","-args","mystring","-report")
    

    string형 스칼라 입력값을 codegen의 명령 형식에 제공하면 예기치 않은 결과가 발생할 수 있습니다. 명령 구문 또는 함수 구문 선택하기 항목을 참조하십시오.

  • 프로그래밍 방식의 codegen 호출을 수행하려면 함수 구문을 사용하십시오. 예를 들면 다음과 같습니다.

    A = {'myfunction','-args',{2 3}};
    codegen(A{:})
    

버전 내역

R2011a에 개발됨