문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 Make (문단 편집) === CMake === Make는 많은 수의 파일들을 간편하게 빌드하는 데 있어 아주 요긴한 프로그램이지만, 프로젝트의 규모가 워낙 거대해져 Makefile로는 감당이 안 되거나 크로스플랫폼 빌드를 하기엔 Make만으로는 부족함이 많았다. 이후 Kitware라는 회사에서 크로스플랫폼과 빌드 스크립트 자동 생성 기능을 지원하는 소프트웨어 [[https://cmake.org/|CMake]]를 출시한 이후 이러한 문제가 해소되었다. [[GNU 일반 공중 사용 허가서|GPL]]을 따르는 Make와는 달리 CMake는 [[BSD 라이선스]]를 따르며, 윈도우와 macOS 및 리눅스를 모두 지원한다. CMake는 지정한 폴더 내의 CMakeLists.txt 파일을 탐색한다. 사용된 소스 파일은 위에서 쓰인 것과 같으며(test.h, test.c, main.c), CMakeLists.txt 파일의 기본적인 템플릿은 아래와 같다. {{{ # 이 CMakeLists.txt 파일을 실행할 수 있는 CMake의 최소 버전 cmake_minimum_required(VERSION 3.10) # 프로젝트명 project(TestProject) # 컴파일에 사용될 소스 파일: 헤더 파일은 없어도 무방하지만, # Precompiled Header를 사용하거나 IDE Integration을 사용하는 경우를 위해 헤더도 포함시켜 주는 것이 좋다. set(HEADERS main.h) set(SOURCES main.c test.c) # 실행 가능한 바이너리를 빌드하기 위한 바이너리의 이름과 소스를 지정 add_executable(main ${SOURCES} ${HEADERS}) # GCC/Clang의 -std=c11 set_property(TARGET main PROPERTY C_STANDARD 11) # C/C++ 컴파일러에 전달할 컴파일 옵션 설정 if(MSVC) target_compile_definitions(main PRIVATE /W4 /WX /Za /permissive- /EHsc) else() target_compile_definitions(main PRIVATE -Wall -Wextra -pedantic -Werror) endif() # 바이너리 파일 'main'을 컴파일할 때 포함할 라이브러리 target_link_libraries(main PRIVATE m) }}} 이렇게 작성을 하고 'cmake .'를 입력하면 Makefile이 자동으로 생성되는 것을 확인할 수 있다. 단, 이 명령어는 해당 OS의 디폴트 컴파일러를 호출하기 때문에[* [[Microsoft Windows|윈도우]]는 [[Visual Studio|MSVC]], [[macOS]]는 [[LLVM]]/[[Clang]], [[UNIX|유닉스]] 및 [[Linux|리눅스]]는 [[GCC]]], 별도의 컴파일러를 사용하고 싶다면 -G 옵션을 사용해야 한다.[* cmake -G "MinGW Makefiles", cmake -G "Unix Makefiles", cmake -G "Xcode", cmake -G "Visual Studio 16 2019" -A x64 등등] {{{ ...(전략)... # The main all target all: cmake_check_build_system $(CMAKE_COMMAND) -E cmake_progress_start ...(생략)... $(MAKE) -f CMakeFiles\Makefile2 all $(CMAKE_COMMAND) -E cmake_progress_start ...(생략)... .PHONY : all # The main clean target clean: $(MAKE) -f CMakeFiles\Makefile2 clean .PHONY : clean ...(후략)... }}} CMake를 통해 만들어진 Makefile에는 굉장히 복잡한 정보들이 생성되어 있으며, 위에서 예시로 든 Makefile처럼 make all과 make clean 옵션도 포함되어 있다. 이렇게 cmake 명령을 한 번 사용하고 나면 다음부터는 기존의 Make처럼 'make all' 명령어만으로 계속 빌드를 할 수 있다.[* 윈도우의 경우 'devenv XXX.sln /build (Debug 또는 Release)'] CMake로 생성한 Makefile을 실행하면 CMakeLists.txt에 지정된 소스 파일에 의존성 변화가 생겼는지를 먼저 검사하고, 변화가 생겼을 경우 해당 소스 파일의 의존성을 추적하여 Makefile을 재생성한 다음 컴파일을 진행한다. 이 덕분에 소스 파일의 개수나 사용하는 라이브러리 파일의 수가 증가해도 CMakeLists.txt만 수정해 주면 간편한 빌드가 가능하다. 윈도우에 한정된 문제로, CMake는 시스템에 등록된 환경 변수 경로에 sh.exe 파일이 있으면 정상 작동이 이루어지지 않는다. sh.exe 파일은 MSYS 1.0으로 설치되는 MinGW에 포함된 [[셸(컴퓨터)|셸]] 프로그램인데, MSYS 1.0과 CMake를 함께 사용해야 하는 상황이 발생할 수 있다. 이럴 때는 CMake 빌드 옵션을 제공하는 IDE의 경우 SHELL=cmd를 추가하면 되고, IDE 환경이 아닐 경우엔 sh.exe 에러와 함께 생성되는 CMakeCache.txt 파일의 //Path 항목에 {{{CMAKE_SH:FILEPATH=CMAKE_SH-NOTFOUND}}}를 추가하면 된다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기