J'essaie de faire en sorte que ma bibliothèque cible dépende de C++ 14. Comment puis-je atteindre, que les cibles, ce lien avec ma cible de bibliothèque dépendent également de C++ 14?La bibliothèque CMake make nécessite la norme cxx
J'ai essayé d'utiliser:
add_library(lib SHARED ${FILES})
target_compile_options(lib INTERFACE CXX_STANDARD 14)
Cela fonctionne pour construire la bibliothèque, mais lorsque je tente de compiler d'autres cibles à l'aide lib
14 C++ n'est pas activé. Je suis conscient qu'il existe d'autres méthodes, mais je n'arrive pas à les faire fonctionner. A savoir il y a:
set_target_properties()
La raison est que les en-têtes de bibliothèque utilisent capture généralisées lambda et les alias modèle comme std::remove_reference_t
et similaires, qui sont dans la bibliothèque standard depuis C++ 14.
Ainsi, si d'autres cibles utilisent cette bibliothèque, elles utilisent de facto également C++ 14. Que diriez-vous de spécifier directement la norme C++ sur eux alors? Il serait étrange que le simple fait d'utiliser une bibliothèque ait pour effet secondaire de changer la langue même que votre programme utilise. – spectras
C'est ce que je fais pour l'instant, mais je pense qu'il y a des manières plus élégantes dans les récentes versions de 'cmake'. Les cibles cuda et mpi parviennent à définir plusieurs indicateurs automatiquement. – OutOfBound
Votre bibliothèque contient des fichiers .h ou hpp qui sont compilés par les utilisateurs. Vérifiez le niveau de compatibilité nécessaire ici. – ddbug