CMake - add_library, target_link_libraries

markyang92·2024년 9월 3일
0

cmake

목록 보기
2/2
post-thumbnail

소스파일


CMakeLists.txt

add_library(): 라이브러리 생성

지정된 소스 파일을 사용하여 프로젝트에 라이브러리를 추가합니다.

add_library(<name> [<type>] [EXCLUDE_FROM_ALL] <sources>...)
<name>이라는 라이브러리 타겟을 생성합니다.
<type>은 라이브러리 종류를 지정합니다:
STATIC: 정적 라이브러리
SHARED: 동적 라이브러리
MODULE: 플러그인(다른 타겟에서 링크 불가, 런타임에 동적 로딩)
<type>을 지정하지 않으면 BUILD_SHARED_LIBS 변수에 따라 STATIC 또는 SHARED가 기본값입니다.
EXCLUDE_FROM_ALL 옵션을 주면 기본 빌드 대상에서 제외됩니다.

add_library(<name> OBJECT <sources>...)
오브젝트 라이브러리를 생성합니다. 소스 파일을 컴파일하지만 라이브러리로 묶지 않습니다.

add_library(... $<TARGET_OBJECTS:objlib> ...)
오브젝트 라이브러리의 오브젝트 파일을 다른 타겟에 포함시킬 때 사용합니다.

add_library(<name> INTERFACE)
인터페이스 라이브러리를 생성합니다. 소스 파일을 컴파일하지 않고, 사용 요구사항만 지정합니다.
주로 target_link_libraries, target_include_directories 등과 함께 사용합니다.

add_library(<name> INTERFACE [EXCLUDE_FROM_ALL] <sources>...)
(CMake 3.19 이상) 소스 파일이 포함된 인터페이스 라이브러리를 생성합니다.
소스 파일은 빌드 타겟에 포함되지만 컴파일되지는 않습니다.

add_library(<name> <type> IMPORTED [GLOBAL])
외부 라이브러리를 참조할 때 사용합니다. <type>은 STATIC, SHARED, MODULE, UNKNOWN, OBJECT, INTERFACE 중 하나입니다.
IMPORTED_LOCATION 등 속성으로 실제 파일 경로를 지정해야 합니다.
GLOBAL 옵션을 주면 전체 프로젝트에서 참조할 수 있습니다.

add_library(<name> ALIAS <target>)
<target>의 별칭을 생성합니다. <name>으로 <target>을 참조할 수 있습니다.

지정된 대상 및/또는 해당 종속성을 연결할 경우 사용할 라이브러리 또는 플래그를 지정합니다. 연결된 라이브러리 대상의 사용 요구 사항이 전파됩니다. 대상 종속성의 사용 요구 사항은 자체 소스의 컴파일에 영향을 줍니다.

    target_link_libraries(<target> ... <item>... ...)
    target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <item>... [<PRIVATE|PUBLIC|INTERFACE> <item>...]...)
    target_link_libraries(<target> <item>...)
    target_link_libraries(<target> <LINK_PRIVATE|LINK_PUBLIC> <lib>... [<LINK_PRIVATE|LINK_PUBLIC> <lib>...]...)
    target_link_libraries(<target> LINK_INTERFACE_LIBRARIES <item>...)

Library, Executable 만 빌드해보자

  • 위의 'Library'에 대해서만 빌드
$ cmake --build . --target Library

  • 위의 'Executable'에 대해서만 빌드
$ cmake --build . --target Executable
profile
pllpokko@alumni.kaist.ac.kr

0개의 댓글