Cada proyecto de CMake requiere una llamada a cmake_minimum_required
para configurar la versión mínima requerida de CMake. Sin embargo, CMake no proporciona ninguna orientación sobre cuál puede ser esta versión, y muchos proyectos simplemente toman la versión actual de CMake o lo que el IDE proponga como predeterminado. Esto es un problema, porque algunas plataformas no siempre proporcionan la última versión de CMake y se necesitan muchas pruebas y errores antes de poder utilizar los proyectos.
cmake_min_version
es un script para determinar la versión mínima de trabajo de CMake para un proyecto determinado. No hace ninguna magia, simplemente realiza una búsqueda binaria utilizando un grupo de binarios de CMake y básicamente implementa la "prueba y error" de una manera eficiente.
Supongamos que ~/projects/example
contiene un proyecto con un archivo CMakeLists.txt
. Luego, la siguiente llamada determina la versión mínima de trabajo de 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)
Como resultado, ~/projects/example/CMakeLists.txt
podría ajustarse para requerir CMake 3.8.0.
Más opciones:
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)
El código requiere la instalación de algunos paquetes:
python3 -mvenv venv
venv/bin/pip3 install -r requirements.txt
El script cmake_downloader.py
se encarga de descargar los binarios de 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 " )
Ejecución de ejemplo:
❯ 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]
El script descarga y descomprime diferentes versiones de CMake en la carpeta tools
.
El código tiene la licencia MIT:
Copyright © 2020-2024 Niels Lohmann
Por el presente se otorga permiso, sin cargo, a cualquier persona que obtenga una copia de este software y los archivos de documentación asociados (el "Software"), para operar con el Software sin restricciones, incluidos, entre otros, los derechos de uso, copia, modificación, fusión. , publicar, distribuir, sublicenciar y/o vender copias del Software, y permitir que las personas a quienes se les proporciona el Software lo hagan, sujeto a las siguientes condiciones:
El aviso de derechos de autor anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.
EL SOFTWARE SE PROPORCIONA “TAL CUAL”, SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITADO A, LAS GARANTÍAS DE COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DE DERECHOS DE AUTOR SERÁN RESPONSABLES DE NINGÚN RECLAMO, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN CONTRACTUAL, AGRAVIO O DE OTRA MANERA, QUE SURJA DE, FUERA DE O EN RELACIÓN CON EL SOFTWARE O EL USO U OTRAS NEGOCIOS EN EL SOFTWARE.