Clangs C ++ Module TS支持:如何告诉clang ++在哪里可以找到模块文件?

时间:2016-10-02 15:33:22

标签: c++ clang++

在他的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.cppclang++ -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 ++编译我的简单例子吗?

3 个答案:

答案 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,完美地工作,没有任何警告或错误。