패키지에 대한 메타 정보를 포함하는 파일 -> 이름, 버전, 저작자, 라이센스 등의 정보 정의, 패키지의 의존성, 인터페이스 정보 포함(메시지, 서비스, 액션 등)
사용 목적
colocn build를 수행 시 package.xml을 참조하여, 빌드할 패키지들 사이의 의존성을 해석 및 적절한 빌드 순서를 결정<?xml version="1.0"?> "버전 1.0"
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
<name>ros_test_py</name>
<version>0.0.0</version>
<description>TODO: Package description</description>
<maintainer email="namsang@todo.todo">namsang</maintainer>
<license>TODO: License declaration</license>
<test_depend>ament_copyright</test_depend>
<test_depend>ament_flake8</test_depend>
<test_depend>ament_pep257</test_depend>
<test_depend>python3-pytest</test_depend>
<export>
<build_type>ament_python</build_type>
</export>
</package>
<license>
:라이센스를 기재한다. BSC, MIT,Apache, GPLv3, LGPLv3등을 기재하면 된다.
<description>
: 패키지에 대한 설명을 문자열로 표기(패키지의 목적과 기능에 대한 내용)
<test_depend>
: 테스트 시 필요한 의존성 지정
<export>
: 패키지에서 외부로 내보낼 항목 정의, 빌드 유형(ament_python, ament_cmake) 명시
<depend><depend>rcply</depend>
<build_depend><build_depend>ament_cmake</build_depend>`
<exec_depend>: 패키지 실행 시 필요한 의존성 정의 <exec_depend>rclcpp</exec_depend>
<buildtool_depend><author><extend><extend>base_package_name</extend>
패키지 내 코드를 빌드하는 방법을 기술하는 파일
빌드에 필요한 컴파일러, 라이브러리, 소스 파일 등을 명시하고, 실행 파일, 라이브러리, 메시지, 서비스 등의 빌드 대상 및 의존성 관리를 설정
빌드 프로세스를 자동화하기 위한 CMake 빌드 시스템에 의해 사용
사용 목적
- ros2에서 패키지의 빌드 규칙 정의
- cmake가 각 패키지를 어떻게 컴파일하고 링크할지 지시하는 지침을 포함
| CMakeLists.txt의 역할 |
|---|
| 1. 패키지에 필요한 최소 CMake 버전 지정 |
| 2. 프로젝트 이름과 버전 설정 |
| 3. 빌드해야 할 타겟 정의 --> executables, libraries |
| 4. 필요한 종속성 패키지를 찾고 링크 |
| 5. 특정 빌드 옵션을 설정하거나 사용자 정의 빌드 규칙 |
| 6. 테스트 실행 및 설치 규칙을 정의 |
# 최소 CMake 버전을 설정합니다.
cmake_minimum_required(VERSION 3.8)
# ROS 2 패키지 이름을 설정합니다.
project(ros_study_msgs)
# 컴파일러가 GCC 또는 Clang인 경우 추가 컴파일 옵션을 설정합니다.
# -Wall: 모든 경고를 출력
# -Wextra: 추가 경고를 출력
# -Wpedantic: 표준에 엄격한 코드를 작성하기 위한 경고를 출력
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# 필요한 ROS 2 의존성을 찾습니다.
# ament_cmake: ROS 2 빌드를 위한 CMake 기반 빌드 시스템
# builtin_interfaces: 기본 메시지 타입 (예: Time, Duration 등)
# rosidl_default_generators: ROS 인터페이스 파일(msg, srv, action)을 코드로 생성하는 데 사용
find_package(ament_cmake REQUIRED)
find_package(builtin_interfaces REQUIRED)
find_package(rosidl_default_generators REQUIRED)
# 메시지 파일을 설정합니다.
# "MyMsg.msg"와 "ArithmeticArgument.msg"라는 사용자 정의 메시지를 정의합니다.
set(msg_files
"msg/MyMsg.msg"
"msg/ArithmeticArgument.msg"
)
# 서비스 파일을 설정합니다.
# "MySrv.srv"와 "ArithmeticOperator.srv"라는 사용자 정의 서비스를 정의합니다.
set(srv_files
"srv/MySrv.srv"
"srv/ArithmeticOperator.srv"
)
# 액션 파일을 설정합니다.
# "MyAction.action"와 "ArithmeticChecker.action"라는 사용자 정의 액션을 정의합니다.
set(action_files
"action/MyAction.action"
"action/ArithmeticChecker.action"
)
# 인터페이스 파일들(msg, srv, action)을 기반으로 ROS 메시지, 서비스, 액션을 생성합니다.
# ${PROJECT_NAME}: 프로젝트 이름을 사용하여 인터페이스를 생성
# DEPENDENCIES: 생성된 인터페이스가 필요한 의존성들을 명시합니다. 여기서는 'builtin_interfaces'를 사용.
rosidl_generate_interfaces(${PROJECT_NAME}
${msg_files}
${srv_files}
${action_files}
DEPENDENCIES builtin_interfaces
)
# 테스트를 빌드할 때 필요한 의존성을 설정합니다.
if(BUILD_TESTING)
# 자동으로 린트(lint) 테스트 의존성을 찾습니다.
find_package(ament_lint_auto REQUIRED)
# 다음 라인은 저작권 확인을 건너뜁니다.
# 모든 소스 파일에 저작권과 라이선스가 추가되면 이 줄을 주석 처리합니다.
set(ament_cmake_copyright_FOUND TRUE)
# 다음 라인은 cpplint 확인을 건너뜁니다(이는 git 저장소에서만 작동).
# 패키지가 git 저장소에 추가되었고, 모든 소스 파일에 저작권과 라이선스가 추가되면 이 줄을 주석 처리합니다.
set(ament_cmake_cpplint_FOUND TRUE)
# 자동으로 테스트에 필요한 의존성을 찾습니다.
ament_lint_auto_find_test_dependencies()
endif()
# 패키지를 ament 빌드 시스템으로 설정합니다.
ament_package()