CMake#
- Cmake란 : C,C++ 언어 컴파일시 make 툴을 이용할 때, 규모가 큰 프로젝트에서 컴파일 의존성 관리를 쉽게 하기 위한 도구
명령어#
cmake CMakeList.txt
: CMakeList.txt파일 안의 내용을 수행한다.
cmake .
: 파일 경로를 입력하면 해당 경로에서 CMakeList.txt파일을 찾아서 수행.
make
: cmake를 이용해 생성한 파일들을 이용해 make로 컴파일
- cmake 명령 후 make를 이용해 컴파일을 수행하면 부산물들이 많이 생성된다. 이를 방지하기 위해 보통 새로운 폴더를 만들어 넣어서 사용한다.
1. mkdir build
2. vi CMakeList.txt 후 내용 작성
3. cd build
4. cmake ..
5. make
- CmakeLists.txt 작성은 쉘 프로그래밍과 유사하다. cmake 문법을 사용하여 작성해 주면 된다. 미리 지정된 변수들도 있는데, 해당 변수들에 주의하며 작성한다.
빌드 설정#
ADD_EXECUTABLE
: 실행파일 생성
ex) ADD_EXECUTABLE(main.exe main.cpp function.cpp)
: main.cpp와 function.cpp를 사용해 main.exe를 생성한다. 헤더 파일은 자동으로 적용된다.
TARGET
: 목표 생성물, 생성할 실행 파일을 의미한다. add_executable()
, add_library()
, add_custom_target()
등의 함수로 수정 가능하다.
add_subdirectory
: 하위 디렉터리를 빌드 환경에 추가한다.
add_subdirectory
를 사용한 경우 find_package를 사용하지 않는다.
add_dependencies
: subdirectory 이름을 사용하지 않고, add_library 혹은 add_executable로 생성한 이름을 첫번째 인자로 사용해야 한다.
ex) add_dependencies(<생성한 객체이름> <모듈1> <모듈2> ...)
message(MODE MESSAGE)
: 로그레벨 MODE
로 MESSAGE를 출력한다.- MODE는 아래 값을 가질 수 있다.
- FATAL_ERROR
- SEND_ERROR
- WARNING
- AUTHOR_WARNING
- DEPRECATION
- STATUS
- VERBOSE
- DEBUG
- TRACE
- MESSAGE에 변수를 출력할 땐
${VARIABLE}
형태를 대입한다.- ex)
message(STATUS ${directories})
- 여러 문자열과 변수를 합하여서 사용도 가능하다.
- ex)
message(STATUS "your directory : ${directories}")
Define#
add_definitions(-DFOO -DBAR ...)
형태로- ex)
add_definitions(-DYOUR_DEFINITION=1 -DMY_DEFINITION="MY")
: #define YOUR_DEFINITION 1
, #define MY_DEFINITION "MY"
두 라인을 수행한 것과 같은 효과를 가진다.
https://nowonbun.tistory.com/712