Conversation
Example (hello)xmake.lua target("hello")
set_kind("binary")
add_files("src/*.cpp", "src/*.mpp") hello.mpp // module;
#include <cstdio>
export module hello;
using namespace std;
export namespace hello {
void say(const char* str) {
printf("%s\n", str);
}
}main.cpp import hello;
int main() {
hello::say("hello module!");
return 0;
}Build and output ruki:hello ruki$ xmake
[ 0%]: ccache compiling.release src/hello.mpp
[ 50%]: ccache compiling.release src/main.cpp
[100%]: linking.release hello
build ok!👌ruki:hello ruki$ xmake -r -v
[ 0%]: ccache compiling.release src/hello.mpp
/usr/local/bin/ccache /usr/bin/xcrun -sdk macosx clang -c -fmodules-ts --precompile -x c++-module -Qunused-arguments -arch x86_64 -fpascal-strings -fmessage-length=0 -mmacosx-version-min=10.14 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -o build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o.pcm src/hello.mpp
/usr/local/bin/ccache /usr/bin/xcrun -sdk macosx clang -c -fmodules-ts -Qunused-arguments -arch x86_64 -fpascal-strings -fmessage-length=0 -mmacosx-version-min=10.14 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -o build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o.pcm
[ 50%]: ccache compiling.release src/main.cpp
/usr/local/bin/ccache /usr/bin/xcrun -sdk macosx clang -c -fmodules-ts -fmodule-file=build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o.pcm -Qunused-arguments -arch x86_64 -fpascal-strings -fmessage-length=0 -mmacosx-version-min=10.14 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -o build/.objs/hello/macosx/x86_64/release/src/main.cpp.o src/main.cpp
[100%]: linking.release hello
"/usr/bin/xcrun -sdk macosx clang++" -o build/macosx/x86_64/release/hello build/.objs/hello/macosx/x86_64/release/src/hello.mpp.o build/.objs/hello/macosx/x86_64/release/src/main.cpp.o -arch x86_64 -mmacosx-version-min=10.14 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -stdlib=libc++ -lz
build ok!👌 |
|
There is currently no environment to compile gcc toolchains with c++modules. (in svn://gcc.gnu.org/svn/gcc/branches/c++-modules) And gcc's c++ modules implementation is not perfect, for the time being I don't support it. 目前我这没环境单独做一份支持c++modules的gcc toolchains来测试c++modules,并且目前gcc对c++modules支持也还不是很完善,等之后集成到gcc正式版的时候,我再对gcc做支持好了,目前不折腾了。。 |
|
关于GCC相关的C++ 20的支持有计划更新吗?C++20的module的header如果要import,需要先编译,不知道有没有什么思路可以讨论一下的? |
|
gcc 不是老早支持了么。。 |
|
GCC 在import 等system heaaders需要提前编译,例如: 但我好像没有找到相关支持的接口,这样GCC就没办法import这些header从而无法发挥其相关的编译优势。 |
|
xmake 支持 gcc11 c++ modules 编译,但 std modules 目前不归 xmake 管,gcc11 没提供编译好的,暂时不支持,xmake 不会额外给你编译依赖的 std modules,这应该是 gcc 自身该提供的支持,而不是让构建工具支持。 像 msvc 都是自带编译好的 std modules 可用。 。。你可以直接用 |
Roadmap
Examples
References