ทุกโปรเจ็กต์ CMake จำเป็นต้องมีการเรียก cmake_minimum_required
เพื่อตั้งค่าเวอร์ชัน CMake ที่จำเป็นขั้นต่ำ อย่างไรก็ตาม CMake ไม่ได้ให้คำแนะนำว่าเวอร์ชันนี้คืออะไร และหลายโครงการใช้เวอร์ชัน CMake ปัจจุบันหรืออะไรก็ตามที่ IDE เสนอเป็นค่าเริ่มต้น นี่เป็นปัญหา เนื่องจากบางแพลตฟอร์มไม่ได้ให้บริการ CMake เวอร์ชันล่าสุดเสมอไป และจำเป็นต้องลองผิดลองถูกเป็นจำนวนมากก่อนจึงจะสามารถใช้โปรเจ็กต์ได้
cmake_min_version
เป็นสคริปต์เพื่อกำหนดเวอร์ชันการทำงานขั้นต่ำของ CMake สำหรับโปรเจ็กต์ที่กำหนด มันไม่ได้ทำสิ่งมหัศจรรย์ใด ๆ แต่เพียงทำการค้นหาแบบไบนารี่โดยใช้พูลของไบนารี CMake และใช้งาน "การทดลองและข้อผิดพลาด" โดยพื้นฐานอย่างมีประสิทธิภาพ
สมมติว่า ~/projects/example
มีโปรเจ็กต์ที่มีไฟล์ CMakeLists.txt
จากนั้นการโทรต่อไปนี้จะกำหนดเวอร์ชันการทำงานขั้นต่ำของ CMake:
❯ venv/bin/python cmake_min_version.py ~ /projects/example
Found 94 CMake binaries from directory tools
[ 0%] CMake 3.9.2 ✔ works
[ 12%] CMake 3.2.2 ✘ error
CMakeLists.txt:7 (cmake_minimum_required)
[ 33%] CMake 3.8.0 ✔ works
[ 50%] CMake 3.7.1 ✘ error
CMakeLists.txt:16 (target_compile_features)
[ 80%] CMake 3.7.2 ✘ error
CMakeLists.txt:16 (target_compile_features)
[100%] Minimal working version: CMake 3.8.0
cmake_minimum_required(VERSION 3.8.0)
ด้วยเหตุนี้ ~/projects/example/CMakeLists.txt
จึงสามารถปรับให้ต้องใช้ CMake 3.8.0 ได้
ตัวเลือกเพิ่มเติม:
usage: cmake_min_version.py [-h] [--tools_directory DIR] [--full_search] [--error_details]
params [params ...]
Find the minimal required CMake version for a project.
positional arguments:
params parameters to pass to CMake
options:
-h, --help show this help message and exit
--tools_directory DIR
path to the CMake binaries (default: " tools " )
--full_search Searches using a top down approach instead of a binary search (default: False)
--error_details Print the full stderr output in case of an error (default: False)
รหัสต้องติดตั้งแพ็คเกจบางอย่าง:
python3 -mvenv venv
venv/bin/pip3 install -r requirements.txt
สคริปต์ cmake_downloader.py
ดูแลการดาวน์โหลดไบนารี CMake:
usage: cmake_downloader.py [-h] [--os {macos,linux,windows}] [--latest_release]
[--latest_patch] [--first_minor]
[--release_candidates] [--min_version MIN_VERSION]
[--max_version MAX_VERSION] [--tools_directory DIR]
Download CMake binaries.
options:
-h, --help show this help message and exit
--os {macos,linux,windows}
OS to download CMake for (default: linux)
--latest_release only download the latest release (default: False)
--latest_patch only download the latest patch version for each release (default: False)
--first_minor only download the first minor version for each release (default: False)
--release_candidates also consider release candidates (default: False)
--min_version MIN_VERSION
only download versions greater or equal than MIN_VERSION
--max_version MAX_VERSION
only download versions less or equal than MAX_VERSION
--tools_directory DIR
path to the CMake binaries (default: " tools " )
ตัวอย่างการรัน:
❯ venv/bin/python3 cmake_downloader.py --latest_patch
Retrieving URLs...
100% | ███████████████████████████████████████████ | 32/32 [00: 18< 00:00, 1.71it/s]
Downloading CMake 2.8.12.2...
100% | ██████████████████████████████████████ | 40.5M/40.5M [00: 12< 00:00, 3.34MB/s]
Downloading CMake 3.0.2...
100% | ██████████████████████████████████████ | 38.7M/38.7M [00: 10< 00:00, 3.90MB/s]
Downloading CMake 3.1.3...
100% | ██████████████████████████████████████ | 28.6M/28.6M [00: 07< 00:00, 3.99MB/s]
Downloading CMake 3.2.3...
100% | ██████████████████████████████████████ | 26.4M/26.4M [00: 07< 00:00, 3.52MB/s]
Downloading CMake 3.3.2...
100% | ██████████████████████████████████████ | 21.3M/21.3M [00: 06< 00:00, 3.68MB/s]
Downloading CMake 3.4.3...
100% | ██████████████████████████████████████ | 21.6M/21.6M [00: 07< 00:00, 3.07MB/s]
Downloading CMake 3.5.2...
100% | ██████████████████████████████████████ | 21.8M/21.8M [00: 06< 00:00, 3.33MB/s]
Downloading CMake 3.6.3...
100% | ██████████████████████████████████████ | 24.9M/24.9M [00: 08< 00:00, 2.92MB/s]
Downloading CMake 3.7.2...
100% | ██████████████████████████████████████ | 25.1M/25.1M [00: 09< 00:00, 2.85MB/s]
Downloading CMake 3.8.2...
100% | ██████████████████████████████████████ | 25.2M/25.2M [00: 06< 00:00, 3.95MB/s]
Downloading CMake 3.9.6...
100% | ██████████████████████████████████████ | 25.5M/25.5M [00: 07< 00:00, 3.41MB/s]
Downloading CMake 3.10.3...
100% | ██████████████████████████████████████ | 25.9M/25.9M [00: 06< 00:00, 3.93MB/s]
Downloading CMake 3.11.4...
100% | ██████████████████████████████████████ | 26.1M/26.1M [00: 06< 00:00, 3.96MB/s]
Downloading CMake 3.12.4...
100% | ██████████████████████████████████████ | 27.7M/27.7M [00: 08< 00:00, 3.44MB/s]
Downloading CMake 3.13.5...
100% | ██████████████████████████████████████ | 30.6M/30.6M [00: 08< 00:00, 3.82MB/s]
Downloading CMake 3.14.7...
100% | ██████████████████████████████████████ | 32.0M/32.0M [00: 08< 00:00, 4.04MB/s]
Downloading CMake 3.15.7...
100% | ██████████████████████████████████████ | 33.2M/33.2M [00: 10< 00:00, 3.44MB/s]
Downloading CMake 3.16.5...
100% | ██████████████████████████████████████ | 34.2M/34.2M [00: 08< 00:00, 4.11MB/s]
Downloading CMake 3.17.0...
100% | ██████████████████████████████████████ | 35.3M/35.3M [00: 10< 00:00, 3.67MB/s]
สคริปต์จะดาวน์โหลดและแตก CMake เวอร์ชันต่างๆ ลงในโฟลเดอร์ tools
รหัสนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT:
ลิขสิทธิ์ © 2020-2024 นีลส์ โลห์มันน์
อนุญาตให้บุคคลใดๆ ได้รับสำเนาของซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง (“ซอฟต์แวร์”) โดยไม่เสียค่าใช้จ่าย เพื่อจัดการกับซอฟต์แวร์โดยไม่มีข้อจำกัด รวมถึงแต่ไม่จำกัดเพียงสิทธิ์ในการใช้ คัดลอก ปรับเปลี่ยน ผสาน เผยแพร่ แจกจ่าย ให้อนุญาตช่วง และ/หรือขายสำเนาของซอฟต์แวร์ และอนุญาตให้บุคคลที่ได้รับซอฟต์แวร์นี้สามารถทำได้ ภายใต้เงื่อนไขต่อไปนี้:
ประกาศเกี่ยวกับลิขสิทธิ์ข้างต้นและประกาศการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์นี้มีให้ "ตามที่เป็น" โดยไม่มีการรับประกันใดๆ ทั้งโดยชัดแจ้งหรือโดยนัย ซึ่งรวมถึงแต่ไม่จำกัดเพียงการรับประกันความสามารถในการค้าขาย ความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ และการไม่ละเมิด ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดต่อการเรียกร้องค่าเสียหายหรือความรับผิดอื่นใดไม่ว่าในการกระทำของสัญญาการละเมิดหรืออย่างอื่นที่เกิดขึ้นจากหรือเกี่ยวข้องกับซอฟต์แวร์หรือการใช้งานหรือข้อตกลงอื่น ๆ ใน ซอฟต์แวร์.