Qt SCXML 컴파일러(qscxmlc) 사용

qscxmlc 도구는 .scxml 파일을 읽고 SCXML에 정의된 대로 상태 머신을 구현하는 클래스가 포함된 C++ 소스 및 헤더 파일을 생성합니다.

사용 방법

프로젝트 파일에서 프로젝트가 scxml 라이브러리에 대해 링크되어 있고 특수 빌드 지시어 STATECHARTS 또는 qt_add_statecharts를 사용하여 사용할 .scxml 파일을 지정하면 qscxmlc 도구가 자동으로 호출됩니다.

cmake를 사용하는 경우:

find_package(Qt6 REQUIRED COMPONENTS Scxml)
target_link_libraries(mytarget PRIVATE Qt6::Scxml)
qt_add_statecharts(mytarget
    MyStatemachine.scxml
)

qmake를 사용하는 경우:

QT += scxml
STATECHARTS = MyStatemachine.scxml

위의 정의에 따라 qmake 또는 cmakeqscxmlc 을 호출하여 MyStatemachine.h 및 MyStatemachine.cpp 을 생성하고 프로젝트에 헤더 및 소스로 적절하게 추가합니다.

기본적으로 상태 머신을 구현하는 생성된 클래스의 이름은 <scxml> 루트 요소의 이름 속성과 일치합니다.

qscxmlc 도구를 수동으로 호출하여 결과 헤더 및 소스 파일을 프로젝트의 일반 소스 파일로 사용할 수도 있습니다. 이러한 소스 파일을 cmake 프로젝트의 일부로 사용하는 경우 이 예제에서 설명한 대로 CMakeLists.txt 파일에서 자동 moc를 추가로 비활성화해야 합니다:

set_source_files_properties(statemachine.h PROPERTIES SKIP_AUTOMOC TRUE)

이 작업을 생략하면 컴파일 중에 중복 심볼 오류가 표시됩니다.

명령줄 옵션

qscxmlc 도구는 다음과 같은 명령줄 옵션을 지원합니다:

옵션설명
--namespace <namespace>생성된 클래스를 지정된 네임스페이스에 넣습니다.
-o <base/out/name>출력 파일의 기본 이름입니다. 여기에는 경로가 포함될 수 있습니다. 지정하지 않으면 입력 파일의 기본 이름이 사용됩니다.
--header <header/out>출력 헤더 파일의 이름입니다. 지정하지 않으면 .h가 기본 이름에 추가됩니다.
--impl <cpp/out>출력 헤더 파일의 이름입니다. 지정하지 않으면 .cpp가 기본 이름에 추가됩니다.
--classname <StateMachineClassName>생성된 상태 머신의 클래스 이름입니다. 아무것도 지정하지 않으면 <scxml> 태그의 이름 속성 값이 사용됩니다. 해당 속성도 지정되지 않으면 입력 파일 이름에서 기본 이름(경로 제외)을 가져옵니다.
--statemethods상태에 대한 추가 접근자 및 신호 메서드를 생성합니다. 이렇게 하면 일반 QObject::connect()로 상태 변경에 연결하고 메서드를 직접 호출하여 상태가 현재 활성화되어 있는지 확인할 수 있습니다.

qmakeCMake 프로젝트 파일은 다음 옵션을 지원합니다:

옵션설명
QSCXMLC_DIR|OUTPUT_DIRECTORY <directory>QSCXMLC_DIR (qmake) 또는 OUTPUT_DIRECTORY (cmake)는 출력 파일의 디렉터리를 지정합니다. OUTPUT_DIR (cmake)는 더 이상 사용되지 않습니다.
QSCXMLC_NAMESPACE|NAMESPACE <namespace>QSCXMLC_NAMESPACE (qmake) 또는 NAMESPACE (cmake)는 생성된 클래스의 네임스페이스를 지정합니다.
QSCXMLC_ARGUMENTS|OPTIONS <options>QSCXMLC_ARGUMENTS (qmake) 또는 OPTIONS (cmake)를 사용하면 qscxmlc 컴파일러에 대한 추가 옵션을 지정할 수 있습니다. cmake를 사용한 QSCXMLC_ARGUMENTS는 더 이상 사용되지 않습니다.

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.