Comment activer C ++ 17 dans CMake
Je suis en utilisant VS 15,3, qui prend en charge intégrée de CMake 3.8. Comment puis-je la cible C++17 sans écrire de drapeaux pour chaque compilateurs? Mes paramètres globaux ne fonctionnent pas:
# https://cmake.org/cmake/help/latest/prop_tgt/CXX_STANDARD.html
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# expected behaviour
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++lastest")
Je m'attendais à CMake pour ajouter "/std:c++dernière" ou de son équivalent lors de la génération VS fichiers de solution, mais pas de c++17 drapeaux a été trouvé, a entraîné d'erreur du compilateur:
C1189 #error: class template optional is only available with C++17.
source d'informationauteur MiP
Vous devez vous connecter pour publier un commentaire.
De la CMake 3.9 documentation:
En bref, CMake n'ont pas été mis à jour pour tenir compte de la norme drapeaux ajouté à VC++ 2017.
Vous avez pour détecter si VC++ 2017 (ou version ultérieure) est utilisé et ajouter les codes correspondants.
Dans CMake 3.10 (et plus tard) ont été fixés pour une version plus récente de VC++. Voir le 3.10 documentation.
Moderne CMake, j'ai trouvé qu'il est préférable d'attribuer CXX normes au niveau de la cible au lieu de la variable globale du niveau et de l'utilisation de la construction dans les propriétés (vu ici: https://cmake.org/cmake/help/latest/manual/cmake-properties.7.html) afin de la garder compilateur agnostique.
Par Exemple:
Vous pouvez garder
set(CMAKE_CXX_STANDARD 17)
pour les autres compilateurs, comme Clang et de la GCC. Mais pour Visual Studio, c'est inutile.Si CMake n'est toujours pas en charge cette fonction, vous pouvez effectuer les opérations suivantes: