--symlink-install
print 한 줄을 고쳤는데, 왜 옛날 글이 나올까?
증상
고쳤는데 그대로입니다
3편의 my_node.py에서 찍는 글을 'Hello!'로 고치고 저장했습니다. 그런데 ros2 run을 해 보면 예전 글이 그대로 나옵니다.
이유
실행되는 것은 옛 사본입니다
6편에서 본 것처럼 기본 빌드는 코드를 install로 복사합니다. ament_python 패키지는 --symlink-install 없이 빌드하면, 코드를 고쳐도 다시 빌드하기 전까지 반영되지 않습니다.
방법 하나
고칠 때마다 다시 빌드합니다
다시 빌드하면 고친 코드가 다시 복사되어 반영됩니다. 확실하지만, 한 글자 고칠 때마다 빌드해야 해서 번거롭습니다.
이미 있던 패키지를 다시 빌드한 것이라면 터미널 2에서 source를 다시 하지 않아도 됩니다. 새 패키지를 더했다면 다시 합니다.
방법 둘
복사 대신 링크를 둡니다
colcon build --symlink-install로 빌드하면 파일을 복사하지 않고 원본을 가리키는 심볼릭 링크(symbolic link)를 둡니다. 그래서 src의 파이썬 코드를 고치면 다시 빌드하지 않아도 바로 반영됩니다.
파이썬 패키지는 실제로 build 폴더를 거쳐 원본으로 이어집니다. 그림은 줄여 그렸습니다.
따라 하기
지우고 옵션을 붙여 다시 빌드
6편에서 옵션 없이 빌드했으니, 먼저 rm -rf build install log로 지우고 colcon build --symlink-install로 다시 빌드합니다. 그 뒤로는 빌드할 때마다 이 옵션을 붙이고, 파이썬 코드는 저장만 하면 바로 반영됩니다.
그래도 빌드
설치 목록을 바꾸면 다시 빌드합니다
링크는 이미 설치된 파일의 내용을 따라갈 뿐입니다. entry_points에 새 명령을 더하거나, 설치할 파일이나 패키지를 새로 더하면 설치할 것 자체가 바뀌므로 다시 빌드해야 합니다.
C++ 코드는 컴파일해야 하므로 이 옵션과 상관없이 고칠 때마다 다시 빌드합니다(9편).
다음 편