0Pricing
C++ Academy · บทเรียน

โครงสร้างโปรเจกต์ CMake และ CMakeLists.txt

จัดโครงสร้างต้นไม้ซอร์ส และเขียนไฟล์ CMakeLists.txt พื้นฐาน

โครงสร้างโปรเจกต์ CMake และ CMakeLists.txt เป็นบทเรียน C++ Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน C++ Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

เหตุใดจึงใช้ CMake

CMake เป็นตัวสร้างระบบการสร้างโปรแกรมที่เป็นมาตรฐานโดยพฤตินัยสำหรับ C++ โดยสร้างไฟล์โครงการสำหรับ Make, Ninja, Visual Studio และ Xcode จากคำอธิบายเพียงชุดเดียว

CMakeLists.txt ขั้นต่ำ

CMakeLists.txt ที่เล็กที่สุดและใช้งานได้สำหรับไฟล์ปฏิบัติการเพียงหนึ่งไฟล์

cmake_minimum_required(VERSION 3.20)
project(MyApp LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(myapp main.cpp)

การสร้างนอกต้นฉบับ

ควรสร้างโปรแกรมในไดเรกทอรีแยกต่างหากเสมอ เพื่อให้โครงสร้างต้นฉบับสะอาด

# from project root
cmake -B build
cmake --build build

โครงสร้างโครงการมาตรฐาน

โครงสร้างที่เป็นระเบียบ:

  • CMakeLists.txt
  • src/ — ไฟล์ต้นฉบับ
  • include/ — ส่วนหัวสาธารณะ
  • tests/ — การทดสอบ
  • third_party/ — ส่วนพึ่งพาที่รวมมา

การเพิ่มไดเรกทอรีย่อย

เข้าไปทำงานซ้ำในไดเรกทอรีย่อยที่มี CMakeLists.txt ของตนเอง

# top-level
add_subdirectory(src)
add_subdirectory(tests)

ตัวแปรและคุณสมบัติ

กำหนดตัวแปรด้วย set อ่านค่าด้วย ${var} ตัวแปรที่ใช้กันทั่วไป ได้แก่ CMAKE_BUILD_TYPE และ CMAKE_CXX_FLAGS

set(CMAKE_BUILD_TYPE Release)
set(SOURCES src/a.cpp src/b.cpp)

ค้นหาไฟล์แบบไดนามิก

ใช้ file(GLOB ...) สำหรับต้นแบบอย่างรวดเร็ว สำหรับงานใช้งานจริง ให้ระบุไฟล์ต้นฉบับอย่างชัดเจน เพื่อให้ CMake ทำงานซ้ำเมื่อมีการเพิ่มไฟล์

# Discouraged for production
file(GLOB SOURCES "src/*.cpp")

# Preferred
add_executable(myapp src/main.cpp src/util.cpp)

การกำหนดค่าการสร้าง

การกำหนดค่าที่ใช้กันทั่วไป ได้แก่ โหมดแก้ไขจุดบกพร่อง โหมดเผยแพร่ RelWithDebInfo และ MinSizeRel กำหนดค่าด้วย -DCMAKE_BUILD_TYPE=Release

cmake -B build -DCMAKE_BUILD_TYPE=Release

คำเตือนของคอมไพเลอร์

เปิดใช้คำเตือนเป็นคุณสมบัติของเป้าหมาย เพื่อให้ใช้งานได้กับคอมไพเลอร์หลายชนิด

target_compile_options(myapp PRIVATE
    $<$<CXX_COMPILER_ID:GNU,Clang>:-Wall -Wextra>
    $<$<CXX_COMPILER_ID:MSVC>:/W4>
)

รูปแบบ CMake สมัยใหม่

ควรใช้คำสั่งที่อิงตามเป้าหมาย (target_*) แทนคำสั่งส่วนกลาง เพราะคำสั่งเหล่านี้กำหนดขอบเขตคุณสมบัติให้กับเป้าหมายเฉพาะได้อย่างเป็นระเบียบ

CMakePresets.json (CMake 3.19 ขึ้นไป)

กำหนดการกำหนดค่าที่นำกลับมาใช้ซ้ำได้ใน CMakePresets.json เพื่อแบ่งปันให้สมาชิกในทีม

การติดตั้งโครงการ

ใช้คำสั่ง install เพื่อคัดลอกไฟล์ไบนารี ไลบรารี และส่วนหัวไปยังเส้นทางติดตั้ง

install(TARGETS myapp DESTINATION bin)
install(DIRECTORY include/ DESTINATION include)

ตรวจสอบความเข้าใจ

รูปแบบไดเรกทอรีที่แนะนำเมื่อเรียกใช้ CMake คืออะไร

สรุป

CMake เป็นตัวสร้างระบบการสร้างโปรแกรม C++ มาตรฐาน ให้เขียน CMakeLists.txt สร้างโปรแกรมนอกไดเรกทอรีต้นฉบับ และใช้คำสั่งที่อิงตามเป้าหมาย ใช้ค่าที่กำหนดไว้ล่วงหน้าสำหรับการกำหนดค่าร่วมกัน และใช้คุณสมบัติสำหรับแฟล็กของคอมไพเลอร์

คำถามที่พบบ่อย

บทเรียน “โครงสร้างโปรเจกต์ CMake และ CMakeLists.txt” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “โครงสร้างโปรเจกต์ CMake และ CMakeLists.txt” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส C++ Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส C++ Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “โครงสร้างโปรเจกต์ CMake และ CMakeLists.txt”

จัดโครงสร้างต้นไม้ซอร์ส และเขียนไฟล์ CMakeLists.txt พื้นฐาน คุณปฏิบัติ C++ Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน C++ Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน C++ Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน

บทเรียน “โครงสร้างโปรเจกต์ CMake และ CMakeLists.txt” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน C++ Academy นี้ได้ไหม

ได้ บทเรียน C++ Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. โครงสร้างโปรเจกต์ CMake และ CMakeLists.txt
  2. เป้าหมาย การเชื่อมโยง และการมองเห็น PUBLIC PRIVATE
  3. การใช้ vcpkg และ Conan จัดการไลบรารีภายนอก
  4. การสร้างไฟล์สำหรับ IDE และการสร้างข้ามแพลตฟอร์ม
← กลับไปที่ C++ Academy