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 += scxmlSTATECHARTS = MyStatemachine.scxml위의 정의가 설정된 상태에서, ` qmake ` 또는 ` cmake `을 실행하면 ` qscxmlc `가 호출되어 `MyStatemachine.h`와 `MyStatemachine.cpp`를 생성하고, 이를 헤더 및 소스 파일로 프로젝트에 적절히 추가합니다.
기본적으로, 상태 머신을 구현하는 생성된 클래스의 이름은 <scxml> 루트 요소의 name 속성과 일치합니다.
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> 태그의 name 속성 값이 사용됩니다. 해당 속성도 지정되지 않은 경우, 입력 파일 이름에서 경로를 제외한 기본 이름이 사용됩니다. |
--statemethods | 상태에 대한 추가 액세서 및 시그널 메서드를 생성합니다. 이를 통해 일반 QObject::connect()을 사용하여 상태 변경에 연결하거나, 메서드를 직접 호출하여 현재 상태가 활성 상태인지 확인할 수 있습니다. |
qmake 및 CMake 프로젝트 파일은 다음 옵션을 지원합니다:
| 옵션 | 설명 |
|---|---|
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는 더 이상 사용되지 않습니다. |
© 2026 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.