簡體   English   中英

如何從命令行編譯/使用 MSVC 中的 header 單元?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM