no image
[CMake] ExternalProject_Add() 사용 연습
ExternalProject 모듈ExternalProject_Add()를 사용해서 SPDLOG를 다운받고, 그 과정에서 오류 해결을 하는 과정을 기록한다. 또한 CMake 3.11 이전 버전이라면 ExternalProject 모듈밖에 선택지가 없지만, 그 이후라면 FetchContent 모듈을 사용하는 방법도 존재한다. ExternalProject는 빌드 타임에 외부 파일들을 불러오며, FetchContent는 CMake를 실행하는 시점에 외부 파일들을 불러온다. ExternalProject_Add()공식 문서에서 ExternalProject_Add()의 옵션에 대해 확인할 수 있다. ExternalProject_Add 커맨드는 외부 프로젝트의 download, update, patch, configur..
2025.04.24
[CMake] .cmake 파일의 사용
.cmake 파일의 사용include 커맨드로 .cmake 파일을 include 할 수 있다. .cmake 파일은 함수 정의, 매크로를 포함할 수 있으며 여러 CMakeLists.txt에서 재사용할 수 있다. 사실은 모든 파일을 include 할 수 있지만, 일반적으로 확장자는 .cmake가 사용된다.// CMakeLists.txtcmake_minimum_required(VERSION 3.17)project(cmake-practice)set(CMAKE_CXX_STANDARD 17)add_executable( ${PROJECT_NAME} src/main.cpp)include(dependency.cmake)// dependency.cmakemessage("include dependency.cmake!..
2025.04.23
[CMake] target_link_directories(), target_link_libraries()
target_link_directories(), target_link_libraries()타겟을 링킹할 때 링커가 라이브러리를 검색할 경로를 지정한다. 즉, 외부라이브러리의 lib 파일 디렉토리를 지정할 때 사용된다. 각 항목은 절대 경로 또는 상대 경로일 수 있으며, 후자는 현재 소스 디렉토리에 대한 상대 경로로 해석된다. 주의할 점은 `target_link_directories()`만 단독으로 쓰는 것은 권장되지 않는 것 같다. 단독으로 사용하게 되면 링커가 타겟에 필요한 라이브러리를 알아서 찾도록 동작하기에 링크할 대상 파일이 무엇인지 명확하지 않다. 그래서 `target_link_libraries()`와 같이 사용하게 된다. 예시target_link_directories(${PROJECT_NAME..
2025.04.22
[CMake] CMAKE_PREFIX_PATH
CMAKE_PREFIX_PATHfind_XXX()로 검색하는 데 사용하는 기본 경로이다. find_package(), find_program(), find_library(), find_file()각 명령은 자체 문서에 명시된 대로 적절한 하위 디렉터리를 추가한다. 예를 들어, bin, lib 또는 include.기본적으로비어있고, 프로젝트에서 설정하도록 되어 있다.검색 prefix의 추가 목록으로 사용되는 환경 변수 CMAKE_PREFIX_PATH가 있다.그 외 CMAKE_SYSTEM_PREFIX_PATH, CMAKE_INCLUDE_PATH 등등 도 존재.보통 아래처럼 사용해서 쓴다.cmake -B build . -DCMAKE_PREFIX_PATH="패키지 경로" 아니면 CMake Tools 익스텐션을..
2025.04.17
[CMake] find_package()
find_package()패키지(일반적으로 프로젝트 외부에서 제공)를 찾아 패키지별 세부 정보를 로드한다. 이 명령에 대한 호출은 dependency providers가 가로챌 수도 있다. find_package( [] [REQUIRED] [COMPONENTS ...])`` : 유일한 필수 인수이다.`[]` : 생략하는 경우가 많다`[REQUIRED]` : 패키지 없이 프로젝트가 성공적으로 configure 될 수 없으면 지정해야 한다.`[COMPONENTS ]` : 좀 더 복잡한 패키지들은 `COMPONENTS` 키워드로 컴포넌트를 선택할 수 있도록 지원하지만, 대부분 패키지는 그 정도로 복잡하지는 않다. Basic Signature사용된 모드에 관계없이 패키지 탐색 성공 여부를 나타내는 _FOUND ..
2025.04.16
[CMake] Microsft store에서 제공하는 powerhsell의 HRESULT: 0x80070005 오류
에러 메시지Failed to load the dll from [C:\Program Files\WindowsApps\Microsoft.PowerShell_7.5.0.0_x64__8wekyb3d8bbwe\hostfxr.dll], HRESULT: 0x80070005"HRESULT: 0x80070005" 이것은 access deined 관련 exception이었다.빌드 파일을 생성할 떄는 문제가 없었는데, `cmkae --build build`를 통해 프로젝트 빌드를 하니 에러 발생. 뭔가 권한 문제처럼 생겨서 찾아보니, powerhsell이라고 다 같은 powershell이 아니었다. Microsft store powerhsell vs github powershellmicrosoft store의 앱 (UWP ..
2025.04.15
no image
[CMake, C++, VScode] linter 에러
#include errors detected based on information provided by the configurationProvider setting. Squiggles are disabled for this translation unit (C:\Users\Junsu Park\Desktop\Desktop\Coding\Study\Computer_Graphics\Hey_OpenGL\src\common.cpp). 해당 오류 발생. .vscode의 c_cpp_properties.json의 configurationProvider를 수정해보기로 결정.configuration Provier의 ms-vscode.cmake-tools를 ms-vscode.cpptools로 변경. 문법에러 검사에 안걸리게 됨..
2023.01.08