해결된 질문
작성
·
98
0
안녕하세요 삼각형님!
CMake를 활용해 OpenGL 환경을 구성하고 있고, FetchContent를 사용하여 외부 라이브러리를 의존하려고 하는 중입니다.
여기서 문제는 glad 라이브러리는 CMake Configure-Generate 단계만으로는
라이브러리가 빌드되지 않아 사용할 수 없었습니다..
여기서 CMake 프로젝트 절차가 매끄럽지 못한 점은 프로젝트 개발을 위해 어쩔수 없이 --build 를 수행 한 뒤에 개발이 가능하다는 점이 걸리게 되었습니다.
Configure, Generate 단계에,
본 프로젝트 add_executable 한 target을 제외하고
의존하는 라이브러리를 사전에 빌드할 수 있을까요?
CMakeLists.txt 첨부 드립니다!
https://github.com/DogGuyMan/OpenGL-With-CMake/blob/main/CMakeLists.txt
https://github.com/DogGuyMan/OpenGL-With-CMake/blob/main/cmake/Dependency.cmake
답변 2
1
아쉽게도 Configure, Generate 단계에 타겟을 빌드할 수는 없습니다. 현재 구성하신 상태로는 OpenGLProject 빌드시 glad도 빌드가 되는 것으로 보입니다.
만약 OpenGLProject 빌드시 glad를 포함해서 빌드하고 싶지 않다면 vcpkg나 conan을 사용하셔야 합니다. 아니면 미리 컴파일을 하고 빌드 결과물로 타겟을 구성해서 사용하셔야 합니다.
-1
안녕하세요, 인프런 AI 인턴입니다. DogGuyMan님께서 질문 주신 FetchContent를 이용한 외부 라이브러리 빌드 문제에 대해 설명드리겠습니다.
FetchContent를 사용하는 경우, 외부 라이브러리를 CMake configure 단계와 generate 단계에서 가져와 사용할 수 있지만, 실제 빌드는 기본적으로 –build 명령을 통해 수행됩니다. 이를 사전에 빌드하도록 설정하려면 다음과 같은 방법을 적용할 수 있습니다:
ExternalProject_Add 사용: ExternalProject_Add
는 FetchContent와 달리 라이브러리를 다른 빌드 단계로 분리하여 빌드할 수 있는 기능을 제공합니다. 이를 통해 라이브러리를 별도로 빌드한 후, 프로젝트에서 활용할 수 있습니다.
전처리 단계 설정: CMakeLists.txt
에서 fetch한 라이브러리를 빌드 대상과 분리하여 전처리 단계에서 수행되도록 설정할 수 있습니다. 이 경우, 필요한 경우 add_dependencies
를 사용하여 의존성을 종속시키는 것이 가능합니다.
Custom Command 사용: add_custom_command
와 add_custom_target
을 활용해 configure나 generate 단계에서 명시적으로 빌드 명령어를 실행시켜서 필요한 내용을 준비할 수 있습니다.
아래는 외부 라이브러리를 fetch하고 빌드하는 예시입니다:
include(FetchContent)
FetchContent_Declare(
glad
GIT_REPOSITORY https://github.com/Dav1dde/glad.git
GIT_TAG v0.1.34
)
FetchContent_MakeAvailable(glad)
# glad 라이브러리를 전처리 단계에서 빌드
add_custom_target(build_glad
COMMAND ${CMAKE_COMMAND} --build ${glad_SOURCE_DIR}
)
add_dependencies(your_project_name build_glad)
DogGuyMan님의 CMakeLists.txt와 Dependency.cmake를 검토하여 이러한 접근 방식을 적용해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
확인했습니다! vcpkg로 한번 문제를 해결해 봐야겠군요 지침을 알려주셔서 감사합니다!