[ros2] CMakeLists.txt

About_work·2024년 3월 6일
0

ros2

목록 보기
29/41

내용

  • ROS 2에서 CMakeLists.txt 파일은 패키지의 빌드 규칙을 정의하는 역할
  • ROS 2는 CMake 빌드 시스템을 사용하여 패키지를 빌드하며, CMakeLists.txt는 CMake가 각 패키지를 어떻게 컴파일하고 링크할지 지시하는 지침을 포함
    CMakeLists.txt의 주요 역할
    • 패키지에 필요한 최소 CMake 버전을 지정
    • 프로젝트 이름과 버전을 설정
    • 빌드해야 할 타겟(executables, libraries)을 정의
    • 필요한 종속성 패키지를 찾고 링크
    • 특정 빌드 옵션을 설정하거나 사용자 정의 빌드 규칙을 추가
    • 테스트 실행 및 설치 규칙을 정의

setup.pysetup.cfg 와의 비교

  • Python 프로젝트의 setup.pysetup.cfg와 유사하게, CMakeLists.txt는 패키지의 빌드 및 설치 방식을 조정
  • 하지만, setup.pysetup.cfg는 주로 Python 패키지와 관련된 설정을 정의하는 반면,
  • CMakeLists.txt는 아래와 같은 더 넓은 범위의 작업을 다룹니다.
    • C/C++ 코드의 컴파일과 링크,
    • ROS에서 사용되는 메시지 및 서비스의 생성

package.xml과의 비교

  • CMakeLists.txt빌드 시 필요한 지침을 담고 있으며, 주로 코드 컴파일과 관련이 깊음
  • package.xml패키지의 메타데이터와 의존성을 관리하는데 중점
  • 두 파일은 함께 작동하여 ROS2 패키지의 빌드와 배포를 가능하게 합니다.
  • CMakeLists.txt:
    • 이 파일은 빌드 시스템 설정을 위한 것으로, CMake를 사용하여 소스 코드를 컴파일하고 패키지를 빌드하는 데 필요한 지침을 포함
    • CMakeLists.txt는 빌드 프로세스에서 아래 것들을 정의
      • 어떤 소스 파일이 실행 파일이나 라이브러리로 컴파일되어야 하는지,
      • 어떤 외부 라이브러리나 의존성이 필요한지,
      • 특정 빌드 옵션이나 컴파일러 플래그가 필요한지
    • C++ 프로젝트에 주로 사용되지만, ROS에서는 Python 패키지와 관련된 설치 작업을 정의하는 데에도 사용
  • package.xml:
    • 이 파일은 패키지의 메타데이터와 의존성 관리를 위한 것
    • 패키지의 이름, 버전, 유지보수자, 라이선스 정보 등을 포함
    • 또한 패키지가 빌드하거나 실행할 때 필요한 다른 패키지들에 대한 의존성을 명시
    • package.xml은 패키지 관리자와 빌드 도구가 패키지를 적절히 처리하고 다른 패키지와의 호환성을 확보할 수 있도록 돕습니다.

코드 분석하기!

cmake_minimum_required(VERSION 3.5)

project(nav_temp_interfaces)

find_package(ament_cmake REQUIRED)
find_package(rosidl_default_generators REQUIRED)
find_package(builtin_interfaces REQUIRED)
find_package(std_msgs REQUIRED)
find_package(geometry_msgs REQUIRED)

rosidl_generate_interfaces(${PROJECT_NAME}
  "msg/PoseStampedArray.msg"
  "msg/StampRecords.msg"
  "msg/BoolStamped.msg"
  "msg/FloatStamped.msg"
  "msg/FloatArrayStamped.msg"
  DEPENDENCIES builtin_interfaces std_msgs geometry_msgs
)

ament_export_dependencies(rosidl_default_runtime)
ament_package()
  • 간단히 말해, 이 CMakeLists.txt 파일은 nav_temp_interfaces라는 ROS 2 패키지에 대한 빌드 규칙을 설정
  • 이 규칙들은 패키지 내에서 사용자 정의 ROS 메시지를 생성하고, 패키지가 올바르게 빌드될 수 있도록 필요한 의존성을 찾고, 다른 패키지가 이 패키지를 사용할 때 필요한 정보를 제공
  • cmake_minimum_required(VERSION 3.5):
    • 이 라인은 CMake의 최소 요구 버전을 지정합니다. 여기서는 3.5 버전 이상이 필요하다고 명시
  • project(nav_temp_interfaces):
    • 이 라인은 프로젝트의 이름을 nav_temp_interfaces로 설정
    • 이 이름은 패키지의 이름과 일치해야 합니다.
  • find_package(...):
    • 이 명령들은 현재 패키지가 의존하는 다른 패키지나 라이브러리를 CMake가 찾도록 지시
    • 여기서는 ament_cmake, rosidl_default_generators, builtin_interfaces, std_msgs, geometry_msgs를 필요로 함
    • 이 패키지들은 메시지를 생성하고 패키지를 빌드할 때 필요
  • rosidl_generate_interfaces(...):
    • 이 명령은 지정된 메시지 타입(.msg 파일들)을 기반으로 필요한 ROS 인터페이스 파일을 생성
    • 이 경우 PoseStampedArray, StampRecords, BoolStamped, FloatStamped, FloatArrayStamped 메시지를 생성하며,
    • 이들은 builtin_interfaces, std_msgs, geometry_msgs 패키지에 정의된 메시지 타입에 대한 의존성을 가짐
  • ament_export_dependencies(rosidl_default_runtime):
    • 이 라인은 빌드 후 다른 패키지가 이 패키지를 찾을 때 rosidl_default_runtime 패키지가 필요하다는 것을 나타냄
  • ament_package():
    • 이 명령은 ament 빌드 시스템에 패키지 설정이 끝났음을 알리고, 설치하거나 테스트하기 위한 준비를 합니다.
profile
새로운 것이 들어오면 이미 있는 것과 충돌을 시도하라.

0개의 댓글