기술나눔

【C】CMake 시작하기

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

CMake는 애플리케이션을 컴파일하고 연결하기 위한 빌드 파일(예: Makefile 또는 Visual Studio 프로젝트 파일)을 생성할 수 있는 크로스 플랫폼 빌드 시스템 생성 도구입니다.

CMake 설치

윈도우

  • 에서 얻을 수 있습니다 CMake 공식 홈페이지 Windows 버전의 CMake를 다운로드하여 설치합니다.
  • 설치가 완료되면 시스템 PATH 환경 변수에 CMake를 추가해야 합니다.

리눅스

sudo apt-get update
sudo apt-get install cmake
  • 1
  • 2

단일 소스 파일 프로젝트

소스 파일을 제공하고 CMake에 프로젝트 구성 설명을 제공해야 합니다. 이 설명은 CMake를 사용하여 수행되었으며 전체 문서는 https://cmake.org/cmake/help/latest/에서 찾을 수 있습니다.

준비하다

다음 파일을 포함하는 간단한 C++ 프로젝트를 만듭니다.

  • CMakeLists.txt
  • 메인.cpp

main.cpp 소스 코드를 단일 실행 파일로 컴파일하려고 합니다.

#include<iostream>
int main(){
    std::cout<<"Hello world"<<std::endl;
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5

CMakeLists.txt

# 设置CMake所需的最低版本。如果使用的CMake版本低于该版本,则会发出致命错误
cmake_minimum_required(VERSION 3.10)

# 声明了项目的名称(Test)和支持的编程语言(CXX代表C++)
project(Test CXX)

# 指示CMake创建一个新目标:可执行文件main。这个可执行文件是通过编译和链接源文件main生成的。CMake将为编译器使用默认设置,并自动选择生成工具
add_executable(main main.cpp)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

생성하다

명령 프롬프트를 열고 프로젝트 디렉터리로 이동한 후 다음을 실행합니다.

mkdir build
cd build
cmake ..
  • 1
  • 2
  • 3

또는 동일한 효과를 사용하여 다음을 수행하십시오.

# 该命令是跨平台的,使用了-H和-B为CLI选项。-H表示当前目录中搜索根CMakeLists.txt文件。-Bbuild告诉CMake在一个名为build的目录中生成所有的文件
cmake -H. -Bbuild
  • 1
  • 2

프로젝트 구성이 이미 있습니다.build 디렉토리에 생성됩니다. 이제 실행 파일을 컴파일할 수 있습니다:

cmake --build .
  • 1

스위치 발전기

CMake는 단일 CMakeLists.txt를 사용하여 다양한 플랫폼의 다양한 도구 세트에 대한 프로젝트를 구성할 수 있는 빌드 시스템 생성기입니다. CMakeLists.txt에서는 코드를 구성하고 컴파일하기 위해 빌드 시스템이 실행해야 하는 작업을 설명합니다. 이러한 지침을 기반으로 CMake는 선택한 빌드 시스템(Unix Makefile, Ninja, Visual Studio 등)에 해당하는 지침을 생성합니다.

  • 비주얼 스튜디오 컴파일러(MSVC): Windows 시스템에 적합하며 일반적으로 사용되는 생성기는 다음과 같습니다. NMake Makefiles 또는Visual Studio.
  • MinGW 또는 MSYS2: Windows 시스템에 적합하며 사용할 수 있습니다. MinGW Makefiles.
  • 유닉스 메이크파일: Linux 또는 macOS와 같은 Unix 계열 시스템용입니다.
cmake -Bbuild -G "NMake Makefiles"
  • 1

여러 실행 파일 및 라이브러리 프로젝트

준비하다

디렉토리 구조는 다음과 같습니다.

MyProject/
├── include/
│   └── say.hpp
├── src/
│   ├── main.cpp
│   └── say.cpp
├── lib/
└── bin/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
# main.cpp

#include"say.hpp"
int main() {
    say();
    return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
# say.cpp

#include<iostream>
#include"say.hpp"
void say(){
    std::cout<<"Hello world!"<<std::endl;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
# say.hpp

#pragma once
void say();
  • 1
  • 2
  • 3
  • 4

CMakeLists.txt

우리는 글을 써야 해 CMakeLists.txt 파일을 컴파일하고 라이브러리에 연결합니다.

# 指定 CMake 的最低版本要求
cmake_minimum_required(VERSION 3.10)

# 定义项目名称和版本
project(test VERSION 1.0.0)

# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 添加 include 目录到编译器的头文件搜索路径
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

# 设置库和可执行文件输出路径
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/bin)

# 创建静态库目标
add_library(message
    STATIC # 若动态库则参数为SHARED
    ${CMAKE_CURRENT_SOURCE_DIR}/src/say.cpp
)

# 添加可执行文件
add_executable(test
    ${CMAKE_CURRENT_SOURCE_DIR}/src/main.cpp
)

# 链接静态/动态库到可执行文件
target_link_libraries(test say)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

생성하다

명령 프롬프트 또는 터미널을 열고 프로젝트 루트 디렉터리로 이동합니다.

cd Test
  • 1

만들다 build 디렉터리로 이동하여 이동합니다.

mkdir build
cd build
  • 1
  • 2

CMake 구성 명령을 실행합니다.

cmake ..
  • 1

빌드 명령을 실행합니다.

cmake --build .
  • 1