... 생략
add_library(mylib SHARED
src/mylib.c
src/buffers.c
)
set_target_properties(mylib PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
PUBLIC_HEADER api/mylib.h
)
target_include_directories(mylib PRIVATE .)
install(TARGETS mylib
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
install(FILES ${CMAKE_BINARY_DIR}/mylib.pc
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig)
1. <target> 만들기
CMake에서 target은 add_executable 또는 add_library 로 만들 수 있다.
add_library(mylib SHARED
src/mylib.c
src/buffers.c
)
2. <target>이 cmake를 통해서 build 될 때 속성 (property) 설정하기
위에서 정의한 target은 SHARED 라이브러리 이므로, VERSION, SOVERSION을 설정할 수 있다.
마지막 줄에 PUBLIC_HEADER를 설정하여, 사용자도 header file에 접근 가능하게 한다.
사용자가 header file에 접근 불가능하게 하려면, PRIVATE_HEADER로 변경한다.
set_target_properties(mylib PROPERTIES
VERSION ${PROJECT_VERSION}
SOVERSION ${PROJECT_VERSION_MAJOR}
PUBLIC_HEADER api/mylib.h
)
3. <target>의 include directory 설정하기
target이 직접적으로 사용하는 header file의 위치를 설정한다. option으로 PUBLIC, PRIVATE, INTERFACE가 있다.
현재 target은 library 이다.
PUBLIC : library가 dependency를 갖고 있는 include directory 가 source file (.cpp) 과 header file (.hpp or .h)에 모두 있을 시 사용한다. 이 dependency는 이 library에 link하는 target에도 설정된다.
PRIVATE : library가 dependency를 갖고 있는 include directory가 source file (.cpp)에만 존재한다. 이 library에 link하는 target에는 설정 안됨.
INTERFACE : library의 source file (.cpp)이 없고, 이 library에 대한 dependency가 header file에만 있을 시에 사용한다.Dependency는 library 자체에 형성되지 않고, 이 library에 link하는 target에 형성된다.
target_include_directories(mylib PRIVATE .)
4. target의 install 위치 설정하기
install(TARGETS mylib
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
CMAKE_XX 매크로를 이요하여 설정한다.
'Computer Science > C++' 카테고리의 다른 글
알기 쉬운 CMake 개념 정리 및 구조 파악. CMake 튜토리얼 (Tutorial) (1) | 2023.12.22 |
---|---|
VSCode에서 C++ include 설정하기. include error. MSYS64, UCRT, Mingw (0) | 2023.08.29 |
Multithreading Mutex using MSYS2, Ucrt64 (Mingw64) 멀티스레드 (Windows 운영체제, C++) (0) | 2023.08.23 |
멀티 스레드 Multi-thread (+ Windows, MFC) (0) | 2023.08.10 |