인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

윤지환님의 프로필 이미지

작성한 질문수

삼각형의 실전! CMake 초급

CMake 변수

Build_SHARED_LIBS 질문

해결된 질문

작성

·

59

0

안녕하세요. 강사님
BUILD_SHARED_LIBS를 지정해줄 때 False는 정적, True는 동적으로 빌드된다는 것이 바로 앞의 커맨드 강의에서
add_library( foo STATIC src/foo.cpp ) 정적
add_library( foo SHARED src/foo.cpp ) 동적
과 같은 형태의 기능을 하는것인가요?

그리고 라이브러리 타겟을 정의할 때, 빌드 결과물을 지정해 줬다면 BUILD_SHARED_LIBS가 적용되지 않는 다는 말씀이 어떤 뜻인지 잘 이해가 안갑니다

답변 2

0

삼각형님의 프로필 이미지
삼각형
지식공유자

안녕하세요?

BUILD_SHARED_LIBS을 사용하면 add_library시 라이브러리 타입을 지정하지 않은 타겟에 일괄적으로 적용되게 됩니다.

add_library( foo STATIC src/foo.cpp )처럼 라이브러리 타입을 정적으로 지정한 경우에는 BUILD_SHARED_LIBSTRUE로 설정하더라도 동적 라이브러리로 빌드가 되지 않는 것을 의미합니다.

감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 윤지환님.

BUILD_SHARED_LIBS에 대한 질문을 주셨군요. 아래에서 기본 개념에 대해 간단히 설명드리고, 유사한 질문에 대한 답변 링크를 제공하겠습니다.

BUILD_SHARED_LIBS 설명

CMake에서 BUILD_SHARED_LIBS는 라이브러리를 기본적으로 정적(STATIC)으로 빌드할지 동적(SHARED)으로 빌드할지를 결정하는 전역 옵션입니다. 이를 통해 라이브러리를 사용할 때 컴파일러가 어떻게 접근할지 결정할 수 있습니다.

  • BUILD_SHARED_LIBS=TRUE: 모든 라이브러리를 동적 라이브러리로 빌드합니다.
  • BUILD_SHARED_LIBS=FALSE: 모든 라이브러리를 정적 라이브러리로 빌드합니다.

add_library 와 BUILD_SHARED_LIBS의 관계

이미 add_library 명령어에서 명시적으로 STATIC이나 SHARED를 지정한 경우, 해당 라이브러리 타겟은 BUILD_SHARED_LIBS 변수의 영향을 받지 않습니다. 이는 add_library(foo STATIC src/foo.cpp)에서 보실 수 있듯이, 명시적으로 정적 라이브러리를 생성하도록 지정했기 때문입니다.

반대로, add_library(foo src/foo.cpp)와 같이 라이브러리 형태를 지정하지 않는 경우에는 BUILD_SHARED_LIBS 설정에 따라 정적 또는 동적 라이브러리로 생성됩니다.

유사한 질문에 대한 기존 답변

  1. CMake에서 동적 및 정적 라이브러리 빌드 관련 질문

위의 링크에서는 라이브러리 빌드 옵션에 대한 자세한 설명과 함께 BUILD_SHARED_LIBS가 어떻게 적용되는지에 대한 답변을 확인하실 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.