Todo projeto CMake requer uma chamada para cmake_minimum_required
para definir a versão minimamente necessária do CMake. No entanto, o CMake não dá nenhuma orientação sobre qual pode ser esta versão, e muitos projetos apenas usam a versão atual do CMake ou o que quer que o IDE esteja propondo como padrão. Isso é um problema, porque algumas plataformas nem sempre fornecem a versão mais recente do CMake e são necessárias muitas tentativas e erros antes que os projetos possam ser usados.
cmake_min_version
é um script para determinar a versão mínima funcional do CMake para um determinado projeto. Ele não faz nenhuma mágica, apenas realiza uma pesquisa binária usando um conjunto de binários do CMake e basicamente implementa a "tentativa e erro" de maneira eficiente.
Suponha que ~/projects/example
contenha um projeto com um arquivo CMakeLists.txt
. Em seguida, a seguinte chamada determina a versão mínima funcional do 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
pode ser ajustado para exigir o CMake 3.8.0.
Mais opções:
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)
O código requer a instalação de alguns pacotes:
python3 -mvenv venv
venv/bin/pip3 install -r requirements.txt
O script cmake_downloader.py
cuida do download dos binários do 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 " )
Exemplo de execução:
❯ 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]
O script baixa e descompacta diferentes versões do CMake na pasta de tools
.
O código está licenciado sob a licença MIT:
Direitos autorais © 2020-2024 Niels Lohmann
É concedida permissão, gratuitamente, a qualquer pessoa que obtenha uma cópia deste software e dos arquivos de documentação associados (o “Software”), para negociar o Software sem restrições, incluindo, sem limitação, os direitos de usar, copiar, modificar, mesclar , publicar, distribuir, sublicenciar e/ou vender cópias do Software e permitir que as pessoas a quem o Software seja fornecido o façam, sujeito às seguintes condições:
O aviso de direitos autorais acima e este aviso de permissão serão incluídos em todas as cópias ou partes substanciais do Software.
O SOFTWARE É FORNECIDO “COMO ESTÁ”, SEM GARANTIA DE QUALQUER TIPO, EXPRESSA OU IMPLÍCITA, INCLUINDO, MAS NÃO SE LIMITANDO ÀS GARANTIAS DE COMERCIALIZAÇÃO, ADEQUAÇÃO A UM DETERMINADO FIM E NÃO VIOLAÇÃO. EM HIPÓTESE ALGUMA OS AUTORES OU DETENTORES DE DIREITOS AUTORAIS SERÃO RESPONSÁVEIS POR QUALQUER RECLAMAÇÃO, DANOS OU OUTRA RESPONSABILIDADE, SEJA EM UMA AÇÃO DE CONTRATO, ATO ILÍCITO OU DE OUTRA FORMA, DECORRENTE DE, OU EM CONEXÃO COM O SOFTWARE OU O USO OU OUTRAS NEGOCIAÇÕES NO SOFTWARE.