ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CMake] Linking Static Library (정적 라이브러리 링크) 하기
    C and C++ 2019. 5. 19. 16:14

    CMake

     

    CMake Script를 사용하면서 소스의 일부분인 Static Library (정적 라이브러리)나 외부에서 복사한 Satatic Library를 타겟에 링크하려는 경우가 생긴다. 내 경우에는 소스 내부에서 빌드한 라이브러리는 링크가 잘 되었다. 그런데 특정 버전의 OpenSSL을 사용하여야 했는데, 빌드 툴에 포함된 버전만 링크가 되고 새로 빌드하여 CMake Script에 포함한 라이브러리가 무시되는 경우가 발생해 난감했다. 뭔가 고상하게 해결을 해보고 싶었으나 전체 Path를 지정하는게 가장 깔끔하게 해결되었기에 방법에 대해 남겨본다.

     

    1. External Library 링크

    빌드하려는 Target이 main.c에서 빌드된 main이라 가정하고, 링크하려는 정적 라이브러리가 프로젝트 소스 디렉토리 밑의 /external/openssl/lib/libssl.a라고 가정하자. 다음과 같은 스크립트로 해당 라이브러리를 Target에 포함할 수 있다.

     

    ADD_EXECUTABLE ( main main.c )
    TARGET_LINK_LIBRARIES( main ${CMAKE_SOURCE_DIR}/external/openssl/lib/libssl.a )

     

    2. 내부 라이브러리 링크

    빌드하려는 Target이 main.c에서 빌드된 main이라 가정하고, 링크하려는 정적 라이브러리가 프로젝트 소스 디렉토리 밑 /module/funcs.c에서 빌드된 libfuncs.a라고 가정하자. 다음과 같은 스크립트로 해당 라이브러리를 Target에 포함할 수 있다.

     

    ADD_EXECUTABLE ( main main.c )
    ADD_LIBRARY ( funcs STATIC modules/funcs.c )
    TARGET_LINK_LIBRARIES ( main PUBLIC funcs )

     

    CMake Script 내에서 빌드된 라이브러리의 경우 "lib"이나 ".a" 등의 키워드를 생략해도 링크가 가능하다.

     

     

    Fin.

    반응형

    댓글

Calvin's Memo