Art*_*oul 5 c++ command-line module visual-c++ c++20
例如我有以下玩具文件:
mod.hpp
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
使用.cpp
import "mod.hpp";
int main() {
std::cout << "Hello, World!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
但是如果你像这样编译它cl use.cpp /std:c++latest
我会得到错误
error C7612: could not find header unit for 'mod.hpp'
Run Code Online (Sandbox Code Playgroud)
如何在 MSVC 中创建/使用标头单元?
注意:我现在正在制作跨平台/跨编译器项目。这意味着我希望相同的源代码能够在 Windows 和 Linux 上的 MSVC/CLang/GCC 中进行编译。对我来说,没有必要制作 MSVC 特定的扩展名 .ixx/.cppm,这就是我在我的例子中使用 .hpp/.cpp 的原因。更重要的是,我根本不制作 .vcxproj/.sln 文件,我只考虑在 MSVC 中进行编译的低级命令行调用。
我提出这个问题只是为了与现成的解决方案分享我的答案。
要创建预编译头单元,请发出下一个命令:
cl /EHsc /std:c++latest /exportHeader mod.hpp
Run Code Online (Sandbox Code Playgroud)
该命令创建mod.hpp.ifc
文件,这是一个预编译头单元模块。这是有关标志的文档/exportHeader
。
然后使用标头单元发出命令:
cl /EHsc /std:c++latest use.cpp /headerUnit mod.hpp=mod.hpp.ifc
Run Code Online (Sandbox Code Playgroud)
有关的文档/headerUnit
在这里。/headerUnit
接受参数header-filename=ifc-filename
。在上面的命令之后,最终程序编译并输出:
Hello, World!
Run Code Online (Sandbox Code Playgroud)
这样您就可以预编译任何标头,包括标准标头,例如import <iostream>;
.
对于上面的命令,我使用了以下文件:
mod.hpp
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
使用.cpp
import "mod.hpp";
int main() {
std::cout << "Hello, World!" << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
836 次 |
最近记录: |