소스파일
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_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 만 빌드해보자
$ cmake --build . --target Library
$ cmake --build . --target Executable