Κοινή χρήση τεχνολογίας

【C】Ξεκινώντας με το CMake

2024-07-12

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

Το CMake είναι ένα εργαλείο δημιουργίας συστήματος δημιουργίας πολλαπλών πλατφορμών που μπορεί να δημιουργήσει αρχεία κατασκευής (όπως αρχεία έργου Makefiles ή Visual Studio) για τη μεταγλώττιση και τη σύνδεση εφαρμογών.

Εγκαταστήστε το CMake

Windows

  • Μπορεί να ληφθεί από Επίσημος ιστότοπος CMake Κάντε λήψη και εγκατάσταση της έκδοσης Windows του CMake.
  • Αφού ολοκληρωθεί η εγκατάσταση, φροντίστε να προσθέσετε το CMake στη μεταβλητή περιβάλλοντος PATH του συστήματος.

Linux

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 κ.λπ.).

  • Visual Studio Compiler (MSVC): Κατάλληλο για συστήματα Windows, οι γεννήτριες που χρησιμοποιούνται συνήθως NMake Makefiles ήVisual Studio.
  • MinGW ή MSYS2: Κατάλληλο για σύστημα Windows, μπορείτε να το χρησιμοποιήσετε MinGW Makefiles.
  • Unix Makefiles: Για συστήματα παρόμοια με το Unix, όπως το Linux ή το macOS.
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

Εκτελέστε την εντολή build:

cmake --build .
  • 1