[1. 개요]
get_property 를 통해 라이브러리 참조 관계를 가져와 일부 수정 후
set_property 를 통해 적용했다 생각했지만,
cmake 빌드 결과에서 해당 target 의 라이브러리 참조 관계는 적용되지 않았다.
이는, LINK_LIBRARIES 대상으로만 수정이 되었고,
INTERFACE_LINK_LIBRARIES 를 대상으로는 수정이 되지 않았기 때문이었다.
[2. PRIVATE, PUBLIC, INTERFACE]
target 의 헤더파일 참조 경로나 라이브러리 링킹 정보를 명시할 때 scope 를 지정할 수 있다.
- PRIVATE: 해당 target 만 참조 (이 target 을 참조하는 대상은 상관없음)
- PUBLIC: 해당 target 및 이 target 을 참조하는 대상도 영향을 받음
- INTERFACE: 해당 target 은 대상이 아니고, 이 target 을 참조하는 대상만 영향을 받음.
즉, PUBLIC 과 INTERFACE scope 는 의존 관계가 전파 된다.
[3. LINK_LIBRARIES, INTERFACE_LINK_LIBRARIES]
따라서, LINK_LIBRARIES 는 scope 가 PRIVATE 및 PUBLIC 인 target 에 적용 되고,
INTERFACE_LINK_LIBRARIES 는 scope 가 PUBLIC 및 INTERFACE 인 target 에 적용 된다.
[4. 결론]
그래서 target 의 의존성 라이브러리를 임의로 수정해야 할 경우
LINK_LIBRARIES 와 INTERFACE_LINK_LIBRARIES 모두 확인하도록 해야한다.
'C++ > CMake' 카테고리의 다른 글
| add_dependencies (1) | 2025.10.27 |
|---|---|
| 산출물 관련 설정, 공유 라이브러리 (2) | 2025.08.07 |
| CMake command 정리 2 (0) | 2023.06.07 |
| 리눅스 CMake 설치 (0) | 2023.01.04 |
| CMake command 정리 (0) | 2022.03.06 |