Maison > développement back-end > C++ > Comment détecter la prise en charge de C 11 dans votre compilateur avec CMake ?

Comment détecter la prise en charge de C 11 dans votre compilateur avec CMake ?

Mary-Kate Olsen
Libérer: 2024-11-02 18:26:31
original
260 Les gens l'ont consulté

How to Detect C  11 Support in Your Compiler with CMake?

Détection de la prise en charge C 11 d'un compilateur avec CMake

L'une des frustrations du développement logiciel consiste à essayer de compiler du code qui nécessite une fonctionnalité non prise en charge par le compilateur installé. Par exemple, une application logicielle nécessitant C 11 peut ne pas se compiler correctement si l'utilisateur dispose d'un compilateur plus ancien qui ne prend en charge que C 98. Dans une telle situation, il serait utile que la compilation échoue pendant l'exécution de CMake plutôt qu'au moment de la compilation.

Solution

CMake version 3.1.0 et versions ultérieures permet de détecter les fonctionnalités C prises en charge par un compilateur C.

<code class="cmake">cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR)
project(foobar CXX)
message("Your C++ compiler supports these C++ features:")
foreach(i ${CMAKE_CXX_COMPILE_FEATURES})
  message("${i}")
endforeach()</code>
Copier après la connexion

Dans la plupart des cas, vous n'aurez pas à spécifier les fonctionnalités C directement mais spécifiez à la place les fonctionnalités C requises et laissez CMake déduire la norme C. CMake s'assurera ensuite que le compilateur est invoqué avec les indicateurs corrects (par exemple, -std=c 11).

Déclarer explicitement votre norme C

<code class="cmake"># Explicitly set C++ standard and required features
add_executable(prog main.cc)
set_property(TARGET prog PROPERTY CXX_STANDARD 11)
set_property(TARGET prog PROPERTY CXX_STANDARD_REQUIRED ON)</code>
Copier après la connexion

Utiliser les fonctionnalités de compilation cible

<code class="cmake"># Specify required C++ features and let CMake deduce the C++ standard
target_compile_features(foobar PRIVATE
  cxx_strong_enums
  cxx_constexpr
  cxx_auto_type)</code>
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal