โครงสร้างโปรเจกต์ 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.txtsrc/— ไฟล์ต้นฉบับ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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- โครงสร้างโปรเจกต์ CMake และ CMakeLists.txt
- เป้าหมาย การเชื่อมโยง และการมองเห็น PUBLIC PRIVATE
- การใช้ vcpkg และ Conan จัดการไลบรารีภายนอก
- การสร้างไฟล์สำหรับ IDE และการสร้างข้ามแพลตฟอร์ม