๐ก ๋ณธ ๋ฌธ์๋ 'Window์์ CMake ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ ๋ง๋ค๊ธฐ'์ ๋ํด ์ ๋ฆฌํด๋์ ๊ธ์ ๋๋ค.
์ ๋ชฉ ๊ทธ๋๋ก Window์์ CMake ์ฌ์ฉํ๊ธฐ ์ํ ํ๊ฒฝ ์ค์ ๋ฐ ์ด๋ฅผ ์ด์ฉํ ํ๋ก์ ํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํ์์ผ๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
1. ํ๊ฒฝ ์ค์
1.1 CMake ์ค์นํ๊ธฐ
์๋์ฐ(Windows)์์ CMake๋ฅผ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋จํฉ๋๋ค. ๊ฐ์ฅ ๋จผ์ CMake์ ๊ณต์ ํํ์ด์ง์์ ๋ค์ด๋ก๋ ํ์ด์ง๋ก ์ ์ํฉ๋๋ค.
์๋์ฐ์ฉ CMake ์ค์น ์คํํ์ผ์ธ 'cmake-<version>-win64-x64.msi' ํ์ผ์ ๋ค์ด๋ก๋ ํฉ๋๋ค. ์ดํ ๊ธฐ๋ณธ์ ์ผ๋ก [Next] ๋ฒํผ์ ๋๋ฌ์ ์ญ ์ค์น๋ฅผ ์งํํ๋ system PATH๋ฅผ ์ค์ ํ๋ ๋ถ๋ถ์์ 'Add CMake to the system PATH for all users'๋ฅผ ์ ํํฉ๋๋ค.
์ค์น๊ฐ ์๋ฃ๋๋ฉด cmake ๋ช ๋ น์ผ๋ก ์ค์น๋ฅผ ํ์ธํฉ๋๋ค.
$ cmake
Usage
cmake [options] <path-to-source>
cmake [options] <path-to-existing-build>
cmake [options] -S <path-to-source> -B <path-to-build>
Specify a source directory to (re-)generate a build system for it in the
current working directory. Specify an existing build directory to
re-generate its build system.
Run 'cmake --help' for more information.
์ด๋ ํฐ๋ฏธ๋์ ๊ป๋ค๊ฐ ํฌ ๊ฒฝ์ฐ cmake ๋ช ๋ น์ ์ธ์ํ์ง ๋ชปํ๋๋ฐ, ์ด๋ ์๋์ฐ ํน์ฑ์ ํ๊ฒฝ๋ณ์๊ฐ ์ปดํจํฐ ์ฌ๋ถํ ์ ํด์ผ ์ ์ฉ์ด ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ์ ์์ ๋๊ธฐ ๊ท์ฐฎ๋ค๋ฉด ๋ค์์ ๋ช ๋ น์ ํตํด PATH ํ๊ฒฝ๋ณ์๋ฅผ ์ ์ฉํด์ฃผ๋ฉด ์ฌ์ฉํ ์ ์์ต๋๋ค.
$ set PATH="C:\Program Files\CMake\bin\";%PATH%
๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ [Problem Fix] ์๋์ฐ ํ๊ฒฝ๋ณ์ ์ฌ๋ถํ ์ํ๊ณ ์ ์ฉํ๊ธฐ์ ์ค๋ช ๋ ๊ฒ์ฒ๋ผ ๋ค์์ ๋ช ๋ น์ ํตํด ํ๊ฒฝ๋ณ์ ์ค์ ์ ์ ์ฉํ ์ ์์ต๋๋ค.
$ taskkill /f /im explorer.exe
1.2 Make ์ค์นํ๊ธฐ
์๋์ฐ(Windows) ํ๊ฒฝ์์ GNU Make๋ฅผ ์ค์นํ์ฌ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ฐ๋จํฉ๋๋ค. gnuwin32 ํํ์ด์ง์์ make ๋ค์ด๋ก๋ ํ์ด์ง๋ก ๋ค์ด๊ฐ๋๋ค.
์ดํ ๋ค์๊ณผ ๊ฐ์ด ์์ค์ฝ๋ ์์ด ๋ฐ๋ก ์ค์นํ ์ ์๋ ์ค์น ํ์ผ์ ๋ฐ๊ธฐ ์ํด [Setup] ๋งํฌ๋ฅผ ๋๋ฆ ๋๋ค.
๋ค์ด๋ก๋๊ฐ ๋๋ค๋ฉด ๋ฐ๋ก ์ค์น ํ๋ก๊ทธ๋จ์ ์คํํ์ฌ ์ค์น๋ฅผ ์งํํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ ์ค์ ๊ทธ๋๋ก [Next] ๋ฒํผ๋ง ๋๋ฅด์ ๋ ์ ์์ ์ผ๋ก ์ค์น๋ฉ๋๋ค.
์ดํ CMake์ ๋ฌ๋ฆฌ Make์ ์คํํ์ผ ๊ฒฝ๋ก๋ฅผ ํ๊ฒฝ๋ณ์๋ก ๋ฑ๋กํด์ฃผ์ด์ผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋๋ ๊ฒฝ๋ก์ธ 'C;\Program Files (x86)\GnuWin32\bin'๋ฅผ ์์คํ ํ๊ฒฝ ๋ณ์ PATH์ ์ถ๊ฐํด์ฃผ์ด์ผ ํฉ๋๋ค.
์ดํ์ ๋ช ๋ น ํ๋กฌํํธ(CMD)์์ make -v ๋ช ๋ น์ ์ ๋ ฅํ์ ๋, ๋ฒ์ ์ ๋ณด๊ฐ ์ถ๋ ฅ์ด ๋๋ฉด ์ ์์ ์ผ๋ก ์ค์น๊ฐ ์๋ฃ๋ ๊ฒ๋๋ค.
2. CMake ํ๋ก์ ํธ ์ ์ํ๊ธฐ
2.1. CMake & Make ํ๋ก์ ํธ ๋น๋ํ๊ธฐ
์ด์ CMake๋ก ์์ ํ๋ก์ ํธ์ธ eigen์ ๋น๋ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
$ git clone https://gitlab.com/libeigen/eigen.git
$ cd eigen
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Debug -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=../install ..
$ make -j4
$ sudo make install
์ฌ๊ธฐ์ ์ค์ํ ๋ถ๋ถ์ cmake ์ต์ ์ค -G "MinGW Makefiles" ์ ๋๋ค. ํด๋น๋ถ๋ถ์ ๋ฃ์ง ์์ผ๋ฉด ๊ณ์ํด์ NMake Makefiles๋ฅผ ์ฐพ๊ฒ ๋์ด ๊ผญ ํฌํจ์์ผ์ฃผ์ด์ผ ํฉ๋๋ค.
2.2. ๋น๋ํ ํ์ผ ํ์ฉํ๊ธฐ
์ด์ eigen ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ ํ๋ก์ ํธ๋ฅผ ์ํด project ํด๋๋ฅผ ๋ง๋ค๊ฒ ์ต๋๋ค. ์์ผ๋ก ํด๋น ํด๋ ํ์๋ก example.cpp์ CMakeLists.txt๋ฅผ ์์ฑํ ์์ ์ด๋ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.
๋จผ์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ example.cpp ํ์ผ์ ์์ฑํฉ๋๋ค.
#include <iostream>
#include <Eigen/Dense>
using Eigen::MatrixXd;
int main()
{
MatrixXd m(2,2);
m(0,0) = 3;
m(1,0) = 2.5;
m(0,1) = -1;
m(1,1) = m(1,0) + m(0,1);
std::cout << m << std::endl;
}
์ดํ cpp ํ์ผ์์ eigen ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋์ผ ๊ฒฝ๋ก์ CMakeLists.txtํ์ผ์ ์์ฑํฉ๋๋ค.
cmake_minimum_required (VERSION 3.0)
project (myproject)
set(EIGEN3_INCLUDE_DIR "~/eigen/cmake")
include_directories(${EIGEN3_INCLUDE_DIR})
find_package (Eigen3 REQUIRED)
add_executable (example example.cpp)
target_link_libraries (example Eigen3::Eigen)
์ฌ๊ธฐ์ EIGEN3_INCLUDE_DIR์ด๋ผ๋ ํ๊ฒฝ๋ณ์์๋ ์๊น ๋น๋ํ eigen ํด๋ ๋ด๋ถ cmake ๊ฒฝ๋ก๋ก ์ ๋ ฅํฉ๋๋ค.
์ดํ ์๊น eigen์ ๋น๋ํ ๊ฒ์ฒ๋ผ ํด๋น ์์ค์ฝ๋๋ฅผ ๋น๋ํ๋ฉด, example์ด๋ผ๋ ์คํํ์ผ์ด ์์ฑ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Debug -G "MinGW Makefiles" ..
$ make -j4
์ด์ build ํด๋ ๋ด์ ์์ฑ๋ example ์คํํ์ผ์ ์คํ์ํค๋ฉด? ๋ค์๊ณผ ๊ฐ์ด ์ฑ๊ณต์ ์ผ๋ก printํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
$ example
3 2.5
-1 1.5
์ฐธ๊ณ
- [Blog] ์๋์ฐ(Windows)์์ CMake ์ค์นํ๋ ๋ฐฉ๋ฒ: https://ndb796.tistory.com/365
- [Blog] ์๋์ฐ(Windows)์์ make ๋ช ๋ น ์ฌ์ฉํ๊ธฐ:https://ndb796.tistory.com/381
- [Blog] [Problem Fix] ์๋์ฐ ํ๊ฒฝ๋ณ์ ์ฌ๋ถํ ์ํ๊ณ ์ ์ฉํ๊ธฐ: https://csj000714.tistory.com/805
'Study: DeveloperTools(DevTool) > DevTool: CMake' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[IDE] VSCode C++ CMake ๊ฐ๋ฐํ๊ฒฝ ์ธํ (MacOS, Linux) (0) | 2022.07.19 |
---|---|
[CMake] make package ํจํค์ง (feat. cmake install) (0) | 2022.07.14 |
[CMake] ๋ณ์ ๋ฐ ์ด๋ฏธ ์ ์๋ ๋งคํฌ๋ก ๊ฐ๋ค (0) | 2022.07.07 |
[CMake] configure_file(): CMake ๋ณ์๊ฐ์ ์์ค์ฝ๋์์ ์ฌ์ฉ! (0) | 2022.07.04 |
[CMake] function: ๋ฐ๋ณต๋๋ ์์ ์ ํจ์ํํ์! (0) | 2022.06.28 |