본문 바로가기

C++/CMake

LINK_LIBRARIES 와 INTERFACE_LINK_LIBRARIES 의 차이점

[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