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
Mary-Kate Olsenoriginal
2024-11-02 18:26:31285parcourir

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>

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>

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>

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!

Déclaration:
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