Um dos desafios no desenvolvimento de software é garantir a compatibilidade com diferentes versões do compilador e seus conjuntos de recursos. Em particular, determinar se um compilador suporta C 11 pode ser crucial para projetos que dependem de recursos de linguagem mais recentes.
CMake fornece uma maneira conveniente de resolver esse problema. Com o CMake versão 3.1.0 e posterior, ele oferece a variável CMAKE_CXX_COMPILE_FEATURES, que lista os recursos C suportados pelo compilador ativo.
Na prática, em vez de confiar diretamente nesta variável, o CMake fornece mecanismos mais estruturados para especificar padrões e recursos da linguagem C.
Especificando o padrão C explicitamente
Uma opção é definir o CXX_STANDARD e [ Propriedades &&&]CXX_STANDARD_REQUIRED para seu destino CMake. Isso especifica explicitamente o padrão C desejado e se ele é obrigatório (se o compilador não suportar, a compilação falhará).
Por exemplo:add_executable(prog main.cc)
set_property(TARGET prog PROPERTY CXX_STANDARD 11)
set_property(TARGET prog PROPERTY CXX_STANDARD_REQUIRED ON)
Especificando recursos C necessários
Como alternativa, você pode usar o comandotarget_compile_features para especificar os recursos C usados pelo seu alvo. O CMake então deduzirá o padrão C apropriado desses recursos.
A propriedade globalCMAKE_CXX_KNOWN_FEATURES lista os recursos C disponíveis para consideração.
Por exemplo:add_executable(foobar main.cc)
set(needed_features
cxx_strong_enums
cxx_constexpr
cxx_auto_type)
target_compile_features(foobar PRIVATE ${needed_features})
Verificando recursos suportados
Para verificar os recursos C suportados do seu compilador:cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(foobar CXX)
message("Your C compiler supports these C features:")
foreach(feature in ${CMAKE_CXX_COMPILE_FEATURES})
message(feature)
endforeach()
Esses métodos oferecem flexibilidade e controle sobre o padrão da linguagem C e os recursos usados em seus projetos CMake. Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3