创建并使用自己的C++模块(Windows10+MSVC)-CSDN博客
在这篇文章中使用的是MSVC来编译模块和使用模块的代码,现在换g++再来编译一次。
环境:
ubuntu 23.10
sharp@sharp-vbox ~> g++ --version
g++ (Ubuntu 13.2.0-4ubuntu3) 13.2.0
Copyright (C) 2023 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
源文件还是之前文章中的那两个,没有任何变化。
sharp@sharp-vbox:~/Prog_Cpp/001_module$ ls
module01_user.cpp module_Vector.cppsharp@sharp-vbox:~/Prog_Cpp/001_module$ g++ -c -std=c++20 -fmodules-ts module_Vector.cpp
sharp@sharp-vbox:~/Prog_Cpp/001_module$ ll
total 24
drwxrwxr-x 3 sharp sharp 4096 4月 11 04:11 ./
drwxrwxr-x 3 sharp sharp 4096 4月 11 03:42 ../
drwxrwxr-x 2 sharp sharp 4096 4月 11 04:11 gcm.cache/
-rw-rw-r-- 1 sharp sharp 383 4月 11 03:45 module01_user.cpp
-rw-rw-r-- 1 sharp sharp 635 4月 11 03:45 module_Vector.cpp
-rw-rw-r-- 1 sharp sharp 2368 4月 11 04:11 module_Vector.osharp@sharp-vbox:~/Prog_Cpp/001_module$ g++ -std=c++20 -fmodules-ts -c module01_user.cpp
sharp@sharp-vbox:~/Prog_Cpp/001_module$ ls
gcm.cache module01_user.cpp module01_user.o module_Vector.cpp module_Vector.osharp@sharp-vbox:~/Prog_Cpp/001_module$ ls ./gcm.cache/
Vector.gcm
sharp@sharp-vbox:~/Prog_Cpp/001_module$ cp ./gcm.cache/Vector.gcm .
sharp@sharp-vbox:~/Prog_Cpp/001_module$ ll
total 32
drwxrwxr-x 3 sharp sharp 4096 4月 11 04:14 ./
drwxrwxr-x 3 sharp sharp 4096 4月 11 03:42 ../
drwxrwxr-x 2 sharp sharp 4096 4月 11 04:12 gcm.cache/
-rw-rw-r-- 1 sharp sharp 383 4月 11 03:45 module01_user.cpp
-rw-rw-r-- 1 sharp sharp 3136 4月 11 04:14 module01_user.o
-rw-rw-r-- 1 sharp sharp 635 4月 11 03:45 module_Vector.cpp
-rw-rw-r-- 1 sharp sharp 2368 4月 11 04:12 module_Vector.o
-rw-rw-r-- 1 sharp sharp 2816 4月 11 04:14 Vector.gcmsharp@sharp-vbox:~/Prog_Cpp/001_module$ g++ -o module01_user module01_user.o module_Vector.o
sharp@sharp-vbox:~/Prog_Cpp/001_module$ ll
total 52
drwxrwxr-x 3 sharp sharp 4096 4月 11 04:15 ./
drwxrwxr-x 3 sharp sharp 4096 4月 11 03:42 ../
drwxrwxr-x 2 sharp sharp 4096 4月 11 04:12 gcm.cache/
-rwxrwxr-x 1 sharp sharp 17128 4月 11 04:15 module01_user*
-rw-rw-r-- 1 sharp sharp 383 4月 11 03:45 module01_user.cpp
-rw-rw-r-- 1 sharp sharp 3136 4月 11 04:14 module01_user.o
-rw-rw-r-- 1 sharp sharp 635 4月 11 03:45 module_Vector.cpp
-rw-rw-r-- 1 sharp sharp 2368 4月 11 04:12 module_Vector.o
-rw-rw-r-- 1 sharp sharp 2816 4月 11 04:14 Vector.gcm
sharp@sharp-vbox:~/Prog_Cpp/001_module$ ./module01_user
sum is: 1.31116
sharp@sharp-vbox:~/Prog_Cpp/001_module$
可以看到,编译模块源文件的命令为:
g++ -c -std=c++20 -fmodules-ts module_Vector.cpp
编译完成后生成一个子目录:gcm.cache,里面包含文件:Vector.gcm,这个就是模块文件。
编译使用模块的源文件也是类似:
g++ -std=c++20 -fmodules-ts -c module01_user.cpp
然后将Vector.gcm文件拷贝至和obj同一个目录下,执行链接命令:
g++ -o module01_user module01_user.o module_Vector.o
可以看到,正确生产可执行文件,且执行结果正确。
-fmodules-ts:支持模块特性,还是试验阶段。