在他的talk CppCon中,Richard Smith提到尽管模块TS支持目前正在进行中,但它已经可以使用了。所以我从svn构建了clang 4.0,并在一个非常简单的例子中尝试了它。在我的myclass.cppm
文件中,我为int
module myclass;
export class MyClass {
public:
MyClass (int i)
: _i{i} {}
int get() {
return _i;
}
private:
int _i;
};
我的main.cpp
只创建该类的一个实例,并将其保留int
输出到std::cout
。
#include <iostream>
#include <string>
import myclass;
int main(int, char**) {
MyClass three{3};
std::cout << std::to_string(three.get()) << std::endl;
}
然后我尝试通过clang++ -std=c++1z -fmodules-ts main.cpp
和clang++ -std=c++1z -fmodules-ts myclass.cppm main.cpp
编译它,但这不起作用,我在两种情况下都得到相同的错误消息:
main.cpp:3:8: fatal error: module 'myclass' not found
import test.myclass;
~~~~~~~^~~~
1 error generated.
很遗憾,我无法找到-fmodules-ts
的文档。有人知道如何让clang ++编译我的简单例子吗?
答案 0 :(得分:1)
您可以按如下方式编译它:
clang++ -std=c++1z -fmodules-ts --precompile -o myclass.pcm myclass.cppm
clang++ -std=c++1z -fmodules-ts -fmodule-file=myclass.pcm -o modules_test main.cpp
但是,这可能不是它的工作方式,因为您需要在编译器调用中手动编码模块的依赖关系层次结构;我对这个问题的正确答案非常感兴趣: - )。
答案 1 :(得分:0)
-fprebuilt-module-path 即使发出警告也会有效:&#34;编译期间未使用的参数:&#39; -fprebuilt-module-path =。&#39;& #34;
完整的命令是:
List<?>
答案 2 :(得分:0)
截至2017年12月27日我已经检查了最新的llvm分支,在我的macbook上构建了它,然后执行了以下操作:
./../bin/clang++ -std=c++17 -fmodules-ts --precompile -o myclass.pcm myclass.cppm
./../bin/clang++ -std=c++17 -fmodules-ts -c myclass.pcm -o myclass.o
./../bin/clang++ -std=c++17 -fmodules-ts -fprebuilt-module-path=. -o main main.cpp hello.o
和tada,完美地工作,没有任何警告或错误。