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).
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.