[英]How to compile/use header units in MSVC from command-line?
例如,我有以下玩具文件:
模組.hpp
#include <iostream>
使用.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 中創建/使用 header 單位?
注意:我現在正在制作跨平台/跨編譯器項目。 這意味着我希望相同的源能夠在 Windows 和 Linux 上的 MSVC/CLang/GCC 中編譯。 對我來說,制作特定於 MSVC 的 extensions.ixx/.cppm 是沒有意義的,這就是我使用 .hpp/.cpp 的原因。 不僅如此,我根本沒有制作 .vcxproj/.sln 文件,我只考慮了在 MSVC 中編譯的低級命令行調用。
我提出這個問題只是為了與現成的解決方案分享我的答案。
要創建預編譯的 header 單元,請發出下一個命令:
cl /EHsc /std:c++latest /exportHeader mod.hpp
此命令創建mod.hpp.ifc
文件,這是一個預編譯的 header 單元模塊。 這是有關/exportHeader
標志的文檔。
然后使用 header 單元發出命令:
cl /EHsc /std:c++latest use.cpp /headerUnit mod.hpp=mod.hpp.ifc
關於/headerUnit
的文檔在這里。 /headerUnit
接受參數header-filename=ifc-filename
。 最終程序上面的命令編譯並輸出后:
Hello, World!
這樣你就可以預編譯任何 header,包括標准的import <iostream>;
.
對於上面的命令,我使用了以下文件:
模組.hpp
#include <iostream>
使用.cpp
import "mod.hpp";
int main() {
std::cout << "Hello, World!" << std::endl;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.