빌드하게 매우 귀찮아 CMake를 MSI 패키지로 설치를 하다가 매우 오랜만에 직접 빌드해보았다. (대신 MSYS2를 깔아야한다.) 전에는 Qt4를 사용했기때문에 쉽게 빌드된거같은데 Qt5를 사용한 GUI 환경을 빌드하려하니 구글링도 안되어 꽤나 삽질했다. CMakeLists.txt를 열어보면 Qt5를 지원하는 모양이였지만 find_package(Qt5Widgets QUIET)
구문이 어떻게 동작하는지 알 수 없어 리눅스 환경에서 bootstrap을 실행하여 생성된 CMakeCache.txt 파일을 직접 분석하여 찾아본 결과 -DBUILD_QtDialog=ON -DQT_QMAKE_EXECUTABLE=D:\OpenSource\Qt5.15.0.x64\bin\qmake.exe -DQt5Widgets_DIR=D:\OpenSource\Qt5.15.0.x64\lib\cmake\Qt5Widgets
이렇게 변수를 설정하면 된다는것을 알게되었다.
자세한 내용은 CMake 소스코드에서 README.rst 파일을 열어보면 되고 이미 빌드된 CMake가 없는 상태에서 간략한 빌드과정은
MSYS2를 설치한다. 설치완료 후 MSYS2를 실행하고 pacman -S --needed git base-devel mingw-w64-x86_64-gcc
명령으로 필요한 패키지를 설치한다. (git는 필요없어보이지만 README.rst에서 설치하라고하니..) 그 후 exit 명령으로 쉘을 종료하고 시작메뉴에서 MSYS2 MinGW 64bit를 실행한다. 이렇게 기본 빌드환경은 끝.
3.18.1버전의 cmake를 압축 풀었다면 폴더 이름이 cmake-3.18.1일것이다. 압축 푼 경로가 D:\OpenSource\cmake-3.18.1 이라면 cd /d/OpenSource 명령으로 폴더 이동 후 임의 폴더 생성한다. (cmake-build1로 만들었다.) cmake-build1 폴더에서 ../cmake-3.18.1/configure –prefix=/d/OpenSource/cmake-bootstrap 명령을 실행 후 make && make install 명령을 실행하여 빌드 및 바이너리를 설치한다. 이렇게 bootstrap 환경은 완료.
Visual Studio의 64비트 툴 콘솔을 실행하여 set PATH=%PATH%;C:\msys64\mingw64\bin 명령을 수행 후(msys2를 기본 경로에 설치했을경우) D:\OpenSource\cmake-build2 폴더를 생성 & 이동하여 ../cmake-bootstrap/bin/cmake ..\cmake-3.18.1 -DCMAKE_INSTALL_PREFIX=D:\OpenSource\cmake -DBUILD_QtDialog=ON -DQT_QMAKE_EXECUTABLE=D:\OpenSource\Qt5.15.0.x64\bin\qmake.exe -DQt5Widgets_DIR=D:\OpenSource\Qt5.15.0.x64\lib\cmake\Qt5Widgets
이렇게 실행하면 Visual Studio Solution 파일(CMake.sln)이 생성된다. (nmake 타겟으로 생성가능하지만 VS 솔루션 파일에서 빌드하면 병렬빌드가 되기에 그냥 기본 타겟으로 생성하였다.) 이제 솔루션 파일을 열고 빌드 형식을 Release / x64로 설정하여 CMakePredefinedTargets/ALL_BUILD 프로젝트를 우클릭하여 빌드 메뉴를 선택한다. 모두 빌드되면 CMakePredefinedTargets/INSTALL 프로젝트를 우클릭하여 빌드 메뉴를 선택하면 CMAKE_INSTALL_PREFIX로 설정된 D:\OpenSource\cmake에 CMake가 설치된다.
D:\OpenSource\cmake\bin\cmake-gui.exe 파일을 실행하면 DLL 종속성 오류가 뜰것이다. 명령 프롬포트에서 D:\OpenSource\cmake\bin 폴더로 이동 후 D:\OpenSource\Qt5.15.0.x64\bin\windeployqt.exe cmake-gui.exe
명령을 실행하면 종속된 파일이 전부 복사되고 이제 cmake-gui.exe를 실행하면 아래와같이 GUI 환경의 cmake 프로그램이 실행된다.
이제 필요한것들을 빌드해야겠다. 실행도 깔끔하게 잘 되니 이것으로 끝!