相关疑难解决方法(0)

如何在CMake中使用VC++模块

MS Visual C++ 2015 Update 1 实现了模块提议.

以下是它的工作原理示例:
来源:

// c.ixx             |  // b.ixx                   |  // a.cpp
module GM;           |  import GM;                 |  import FM;
export void g() {}   |  module FM;                 |  int main() { f(); }
                     |  export void f() { g(); }   | 
Run Code Online (Sandbox Code Playgroud)

构建命令:

set CL=/EHsc /experimental:module   # Default flags for cl.exe
cl.exe /c c.ixx                     # Produces c.obj, GM.ifc
cl.exe /c b.ixx                     # Depends on GM.ifc, produces b.obj, FM.ifc
cl.exe /c a.cpp                     # Depends on FM.ifc, …
Run Code Online (Sandbox Code Playgroud)

c++ cmake visual-c++ c++-modules

7
推荐指数
1
解决办法
745
查看次数

如何在C++模块中使用标准库?(例如:`import std.io`)

我如何在Clang中使用C++模块中给出的基本示例适合我,但不导入标准库(例如via import std.stdio;); 在浏览了http://clang.llvm.org/docs/Modules.html之后,目前尚不清楚如何在C++模块中使用标准库,例如:

// foo.cppm:
export module foo;
// works: #include <stdio.h>
// none of these work:
import std.stdio;
import std.io;
import std;

export void test_foo(){
  printf("hello world\n");
}
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误: clang++ -std=c++17 -fmodules-ts --precompile foo.cppm -o foo.pcm foo.cppm:4:8: fatal error: module 'std.stdio' not found

注意: clang++ --version Apple LLVM version 9.1.0 (clang-902.0.39.1) Target: x86_64-apple-darwin17.4.0 我在OSX上.我也试过brew install llvm的clang也没用.

制作这样的作品最简单的方法是什么?

c++ std clang standard-library c++-modules

6
推荐指数
1
解决办法
883
查看次数

"import std;"的目的 在C++中

我在cppdepend网站上看到了以下一小段代码.

import std; // Module import directive.
int main() 
{
    std::cout<<"Hello World\n";
}
Run Code Online (Sandbox Code Playgroud)

那么,import std;C++ 的目的是什么?如何使用import std;而不是using namespace std;在C++中?

我试图在G ++编译器中编译程序,但是我收到了一个错误.

c++ c++-modules

4
推荐指数
1
解决办法
802
查看次数

使用 clang 将 std lib 作为模块导入

我正在尝试使用 clang 中的模块,并希望将标准库包含为模块而不是包含。

目前我这样做

#include <iostream>
#include <string>
Run Code Online (Sandbox Code Playgroud)

看来您在 msvc 中应该能够导入标准库,例如

import std.core;
Run Code Online (Sandbox Code Playgroud)

然而,当使用 clang 时,这似乎没有实现,或者以另一种方式实现。

我的问题是:是否可以像微软建议的那样导入 stl-includes,或者是否可以将标准库包含映射到模块 somhow。

注意:我无法使用的原因#include <...>或者#import <...>是因为其他错误可能会导致其自身问题。所以我认为import std.core如果可能的话,获取或类似是现在要走的路。

ModernesCpp还提到了 std.core。

c++ clang++ c++20 c++-modules

4
推荐指数
2
解决办法
731
查看次数

使用 clang 链接 C++ 模块 TS

我正在尝试将 C++ 模块 TS 与 clang 一起使用。

我创建了两个文件:

// foo.cppm
export module foo;

export void test() {
}
Run Code Online (Sandbox Code Playgroud)

// bar.cpp
import foo;

int main() {
  test();
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

foo.cppm用这个命令编译

clang++ --std=c++17 -fmodules-ts --precompile foo.cppm -o foo.pcm
Run Code Online (Sandbox Code Playgroud)

它编译没有错误并创建一个foo.pcm文件,但是当我尝试使用此命令编译二进制文件时:

clang++ --std=c++17 -fmodules-ts -fprebuilt-module-path=. -fmodule-file=foo.pcm bar.cpp
Run Code Online (Sandbox Code Playgroud)

它打印一个错误:

/tmp/bar-f69a1f.o: In function `main':
bar.cpp:(.text+0x10): undefined reference to `test()'
Run Code Online (Sandbox Code Playgroud)

我用 clang 7 trunk 和 clang 6 尝试过。我也尝试了不同的std选项和这个命令:

clang++ --std=c++17 -fmodules-ts -fmodule-file=foo.pcm bar.cpp -o bar
Run Code Online (Sandbox Code Playgroud)

没有任何帮助。

有趣的是,如果一个模块使用其他模块的符号,clang 会编译这些模块。所以据我所知,问题是在链接阶段。

有什么问题?

c++ clang c++-modules

0
推荐指数
1
解决办法
931
查看次数

标签 统计

c++ ×5

c++-modules ×5

clang ×2

c++20 ×1

clang++ ×1

cmake ×1

standard-library ×1

std ×1

visual-c++ ×1