web-dev-qa-db-fra.com

Comment utiliser les modules c ++ 20 avec CMake?

Clang et MSVC prend déjà en charge Modules TS à partir de la norme C++ 20 inachevée. Puis-je construire mon projet basé sur des modules avec CMake ou un autre système de construction et comment?

J'ai essayé build2 , il prend en charge les modules et cela fonctionne très bien, mais j'ai une question sur sa gestion des dépendances (UPD: la question est fermée).

16
Blaze

Je n'ai pas pu trouver de support Cmake pour les modules. Voici un exemple d'utilisation des modules à l'aide de clang. J'utilise Mac et cet exemple fonctionne bien sur mon système. Il m'a fallu un certain temps pour comprendre cela, donc je ne sais pas à quel point cela est général sous Linux ou Windows.

Code source dans le fichier driver.cxx

import hello;
int main() { say_hello("Modules"); } 

Code source dans le fichier hello.cxx

#include <iostream>
module hello;
void say_hello(const char *n) {
  std::cout << "Hello, " << n << "!" << std::endl;
}

Code source dans le fichier hello.mxx

export module hello;
export void say_hello (const char* name);

Et pour compiler le code avec les fichiers sources ci-dessus, voici les lignes de commande sur le terminal

clang++ \
  -std=c++2a                        \
  -fmodules-ts                      \
  --precompile                      \
  -x c++-module                     \
  -Xclang -fmodules-embed-all-files \
  -Xclang -fmodules-codegen         \
  -Xclang -fmodules-debuginfo       \
  -o hello.pcm hello.mxx

clang++ -std=c++2a -fmodules-ts -o hello.pcm.o -c hello.pcm

clang++ -std=c++2a -fmodules-ts -x c++ -o hello.o \
  -fmodule-file=hello.pcm -c hello.cxx

clang++ -std=c++2a -fmodules-ts -x c++ -o driver.o \
  -fmodule-file=hello=hello.pcm -c driver.cxx

clang++ -o hello hello.pcm.o driver.o hello.o

et pour bien démarrer la prochaine compilation

rm -f *.o
rm -f hello
rm -f hello.pcm

production attendue

./hello
Hello, Modules!

J'espère que cela vous sera utile.

1
sbh