[CMake] target_link_directories(), target_link_libraries()
|2025. 4. 22. 03:18
target_link_directories(), target_link_libraries()
타겟을 링킹할 때 링커가 라이브러리를 검색할 경로를 지정한다. 즉, 외부라이브러리의 lib 파일 디렉토리를 지정할 때 사용된다. 각 항목은 절대 경로 또는 상대 경로일 수 있으며, 후자는 현재 소스 디렉토리에 대한 상대 경로로 해석된다.
주의할 점은 `target_link_directories()`만 단독으로 쓰는 것은 권장되지 않는 것 같다. 단독으로 사용하게 되면 링커가 타겟에 필요한 라이브러리를 알아서 찾도록 동작하기에 링크할 대상 파일이 무엇인지 명확하지 않다. 그래서 `target_link_libraries()`와 같이 사용하게 된다.
예시
target_link_directories(${PROJECT_NAME} PUBLIC ${DEP_LIB_DIR}) # lib 파일 존재하는 디렉토리 지정
target_link_libraries(${PROJECT_NAME} PUBLIC ${DEP_LIBS}) # 실제로 어떤 라이브러리를 사용할지를 지정
다른 방법
방법 1. target_link_libraries() 단독 사용
그런데, `target_link_libraries()` 커맨드는 전체 경로를 포함해서 동작할 수 있기에, ` target_link_directories()` 커맨드를 사용하지 않고 ` target_link_libraries()` 커맨드 단독으로 전체 경로를 포함하여 사용하는 방법도 있다.
방법 2. IMPORTED 타겟 활용 (모던 CMake 방식)
IMPORTED 타겟을 통해 프로젝트 외부에 있는 파일을 프로젝트 내부의 논리적인 타겟으로 변환할 수 있다. 이 방식은 외부 라이브러리를 `target_link_libraries()`에서 직접 경로를 넘기지 않고 타겟 이름으로 참조를 할 수 있게 해준다,
add_library(spdlog::spdlog STATIC IMPORTED GLOBAL)
set_target_properties(spdlog::spdlog PROPERTIES
IMPORTED_LOCATION "${DEP_LIB_DIR}/spdlog$<$<CONFIG:Debug>:d>.lib"
INTERFACE_INCLUDE_DIRECTORIES "${DEP_INCLUDE_DIR}"
)
target_link_libraries(${PROJECT_NAME}
PRIVATE
spdlog::spdlog
)
참고 자료
- https://cmake.org/cmake/help/latest/command/target_link_directories.html
- https://runebook.dev/ko/articles/cmake/command/target_link_directories
- https://blog.naver.com/zxwnstn/222134541027
'패키지 설치 및 빌드 시스템 > CMake' 카테고리의 다른 글
| [CMake] ExternalProject_Add() 사용 연습 (0) | 2025.04.24 |
|---|---|
| [CMake] .cmake 파일의 사용 (0) | 2025.04.23 |
| [CMake] CMAKE_PREFIX_PATH (0) | 2025.04.17 |
| [CMake] find_package() (0) | 2025.04.16 |
| [CMake] Microsft store에서 제공하는 powerhsell의 HRESULT: 0x80070005 오류 (0) | 2025.04.15 |