본문 바로가기

Development/CMake4

CMake FetchContent 명령어 FetchContent FetchContent는 CMake 3.11에 새로 추가된 명령어입니다. 대부분의 언어들은 외부 라이브러리들을 사용하기 위해 라이브러리 설치 또는 종속성 추가를 쉽게 할 수 있는 기능을 제공하고 있습니다. 예를 들면, Java의 maven이나 gradle, Python의 pip 등입니다. 하지만, C++에는 그런 기능이 없었기 때문에 외부 라이브러리를 사용하기 위해서는 아주 까다로운 설정이 필요했었습니다. 이제 FetchContent 명령어를 통해 CMake에서도 외부 라이브러리들을 쉽게 설치하고 사용할 수 있게 되었습니다. ExternalProject과 차이 CMake 3.11 버전 이전에도 ExternalProject 명령어를 이용해서 외부 라이브러리를 사용할 수 있었습니다. .. 2023. 11. 1.
CMake - 정적 라이브러리 링크하기 외부 라이브러리 링크하기 빌드하려는 타겟이 main.c에서 빌드된 main이라 가정하고, 링크하려는 정적 라이브러리가 프로젝트 소스 디렉토리 밑의 "ext/openssl/lib/libssl.a"라고 가정합니다. ADD_EXECUTABLE(main main.cc) TARGET_LINK_LIBRARIES(main ${CMAKE_SOURCE_DIR}/ext/openssl/lib/libssl.a) 내부 라이브러리 링크 빌드하려는 타겟이 main.c에서 빌드된 main이라 가정하고, 링크하려는 정적 라이브러리가 프로젝트 소스 디렉토리 아래 "module/mygames.c"에서 빌드된 libmygames.a라고 가정합니다. ADD_EXECUTABLE(main main.c) ADD_LIBRARY(mygames STA.. 2022. 9. 6.
Ninja(닌자) 빌드 시스템 이해하기 닌자(Ninja)는 속도에 중점을 둔 소형 빌드 시스템입니다. 다른 빌드 시스템과 다른 점은 상위 레벨 빌드 시스템에서 입력 파일을 생성하도록 설계되었으며 최대한 빨리 빌드를 실행하도록 설계되었습니다. Make는 증분 빌드(또는 무연산 빌드)를 수행 할 때 안정성을 위해 속도가 상대적으로 느려집니다. 이렇게 하면 예를 들어 약39,000 개의 입력 파일을 하나의 실행 파일로 컴파일하는 크로미움(chromium) 과 같은 대규모 프로젝트에서 작업하는 개발자의 작업 속도가 상당히 느려질 수 있습니다. 실제로 크롬(chrome)은 Ninja의 주요 사용자입니다. 이러한 의미로 닌자(Ninja)는 Make를 대체하기 위한 것일 수 있습니다. Make 와는 달리 Ninja 빌드 파일은 손으로 직접 작성하지 않으므.. 2022. 4. 23.
CMakeLists.txt 파일 기본 골격 만들기 컴파일 하기 위해 필요한 CMakeLists.txt 뼈대를 만들고 샘플을 살펴보겠습니다. CMakeLists.txt 기본 템플릿 # 요구 CMake 최소 버전 CMAKE_MINIMUM_REQUIRED ( VERSION ) # 프로젝트 이름 및 버전 PROJECT ( "" ) SET ( PROJECT_VERSION_MAJOR ) SET ( PROJECT_VERSION_MINOR ) # 빌드 형상(Configuration) 및 주절주절 Makefile 생성 여부 SET ( CMAKE_BUILD_TYPE ) SET ( CMAKE_VERBOSE_MAKEFILE ) # 빌드 대상 바이너리 파일명 및 소스파일 목록 SET ( OUTPUT_ELF "${CMAKE_PROJECT_NAME}-${PROJECT_VERSIO.. 2022. 4. 23.