타겟 링크 설정의 개념

CMake에서 "타겟"이란 실행 파일, 라이브러리 등을 의미한다. CMakeLists.txt에서 target_link_libraries() 명령어를 사용해 타겟에 특정 라이브러리나 다른 타겟을 연결할 수 있다. 이는 컴파일 단계에서 필요한 라이브러리들을 지정하고, 이들 라이브러리와 함께 타겟을 빌드하도록 지시하는 것이다.

target_link_libraries()의 기본 형식은 다음과 같다:

target_link_libraries(<타겟 이름> [옵션] <라이브러리 또는 타겟>...)

여기서 <타겟 이름>은 연결하려는 타겟의 이름을, <라이브러리 또는 타겟>은 해당 타겟에 연결하고자 하는 외부 라이브러리나 다른 CMake 타겟을 의미한다. 예를 들어, MyExecutable이라는 타겟에 MyLibrary라는 라이브러리를 링크하려면 다음과 같이 작성할 수 있다:

target_link_libraries(MyExecutable MyLibrary)

타겟 링크의 옵션

CMake에서는 타겟 링크 시 여러 옵션을 제공한다. 주로 사용되는 옵션은 다음과 같다:

예를 들어, 다음과 같이 PRIVATE, PUBLIC, INTERFACE를 사용할 수 있다:

target_link_libraries(MyExecutable PRIVATE MyLibrary1)
target_link_libraries(MyExecutable PUBLIC MyLibrary2)
target_link_libraries(MyExecutable INTERFACE MyLibrary3)

인터페이스 라이브러리와의 연동

INTERFACE 옵션은 인터페이스 라이브러리와 자주 사용된다. 인터페이스 라이브러리는 실제 라이브러리 파일이 없고, 단지 헤더 파일이나 컴파일 옵션 등의 설정만을 제공하는 라이브러리다. 예를 들어, 다음과 같이 인터페이스 라이브러리를 정의하고 사용할 수 있다:

add_library(MyInterfaceLib INTERFACE)
target_include_directories(MyInterfaceLib INTERFACE include/)
target_link_libraries(MyExecutable INTERFACE MyInterfaceLib)

시스템 라이브러리 링크

외부 시스템 라이브러리를 링크할 때도 target_link_libraries()를 사용할 수 있다. 예를 들어, POSIX 소켓 라이브러리인 libpthread를 연결하려면 다음과 같이 작성한다:

target_link_libraries(MyExecutable pthread)

이 경우 pthread는 시스템에 이미 설치되어 있는 라이브러리로, 빌드 과정에서 자동으로 검색되고 링크된다.

타겟 의존성 관리

CMake는 타겟 간의 의존성을 자동으로 관리한다. 예를 들어, target_link_libraries()를 사용해 다른 타겟을 링크할 경우, CMake는 해당 타겟을 먼저 빌드한 후에 현재 타겟을 빌드한다. 이를 통해 빌드 순서를 명시적으로 지정할 필요가 없어진다.

타겟 링크의 영향

target_link_libraries()를 사용해 타겟에 라이브러리를 링크하면, 컴파일러는 해당 라이브러리의 경로와 파일을 참조해 타겟을 빌드하게 된다. 이때 링크된 라이브러리의 함수나 변수를 타겟에서 사용할 수 있게 된다. 또한, CMake는 링크된 라이브러리의 종속성까지 자동으로 처리해준다.


관련 자료: - CMake 공식 문서: target_link_libraries - CMake 튜토리얼