如何从 command-line compile/use header MSVC 中的单元?
How to compile/use header units in MSVC from command-line?
例如我有以下玩具文件:
mod.hpp
#include <iostream>
use.cpp
import "mod.hpp";
int main() {
std::cout << "Hello, World!" << std::endl;
}
但是如果你像cl use.cpp /std:c++latest
那样编译它,那么我会得到错误
error C7612: could not find header unit for 'mod.hpp'
如何在 MSVC 中 create/use header 单元?
注意:我现在正在制作 cross-platform/cross-compiler 项目。这意味着我希望相同的源能够在 Windows 和 Linux 上编译为 MSVC/CLang/GCC。对我来说,没有必要制作 MSVC-specific 扩展名 .ixx/.cppm,这就是我在我的案例中使用 .hpp/.cpp 的原因。此外,我根本没有制作 .vcxproj/.sln 文件,我只考虑 low-level 在 MSVC 中编译的命令行调用。
这个问题是我做的,只是为了与 ready-made 解决方案分享我的答案。
要创建预编译的 header 单元发出下一条命令:
cl /EHsc /std:c++latest /exportHeader mod.hpp
此命令创建 mod.hpp.ifc
文件,这是一个预编译的 header 单元模块。 Here 是关于 /exportHeader
标志的文档。
然后使用header单元发出命令:
cl /EHsc /std:c++latest use.cpp /headerUnit mod.hpp=mod.hpp.ifc
关于 /headerUnit
的文档是 here。 /headerUnit
接受参数 header-filename=ifc-filename
。在上面的命令最终程序编译并输出之后:
Hello, World!
这样你就可以预编译任何 header,包括像 import <iostream>;
.
这样的标准的
对于上面的命令,我使用了以下文件:
mod.hpp
#include <iostream>
use.cpp
import "mod.hpp";
int main() {
std::cout << "Hello, World!" << std::endl;
}
例如我有以下玩具文件:
mod.hpp
#include <iostream>
use.cpp
import "mod.hpp";
int main() {
std::cout << "Hello, World!" << std::endl;
}
但是如果你像cl use.cpp /std:c++latest
那样编译它,那么我会得到错误
error C7612: could not find header unit for 'mod.hpp'
如何在 MSVC 中 create/use header 单元?
注意:我现在正在制作 cross-platform/cross-compiler 项目。这意味着我希望相同的源能够在 Windows 和 Linux 上编译为 MSVC/CLang/GCC。对我来说,没有必要制作 MSVC-specific 扩展名 .ixx/.cppm,这就是我在我的案例中使用 .hpp/.cpp 的原因。此外,我根本没有制作 .vcxproj/.sln 文件,我只考虑 low-level 在 MSVC 中编译的命令行调用。
这个问题是我做的,只是为了与 ready-made 解决方案分享我的答案。
要创建预编译的 header 单元发出下一条命令:
cl /EHsc /std:c++latest /exportHeader mod.hpp
此命令创建 mod.hpp.ifc
文件,这是一个预编译的 header 单元模块。 Here 是关于 /exportHeader
标志的文档。
然后使用header单元发出命令:
cl /EHsc /std:c++latest use.cpp /headerUnit mod.hpp=mod.hpp.ifc
关于 /headerUnit
的文档是 here。 /headerUnit
接受参数 header-filename=ifc-filename
。在上面的命令最终程序编译并输出之后:
Hello, World!
这样你就可以预编译任何 header,包括像 import <iostream>;
.
对于上面的命令,我使用了以下文件:
mod.hpp
#include <iostream>
use.cpp
import "mod.hpp";
int main() {
std::cout << "Hello, World!" << std::endl;
}