在 Visual Studio 2022 中导入外部 C++20 模块

问题描述 投票:0回答:4

我正在 Visual Studio 2022 中探索 C++20 的模块,并且正在研究外部模块;已在一个项目中编译的模块,我将其称为库项目,并在另一个项目中导入。据我了解,这可以通过例如将库项目编译为静态库并生成

.lib
文件来完成,然后可以将其作为依赖项添加到其他项目中。然后,要从库项目添加模块接口,我可以通过将其相应的
.ixx.ifc
文件添加到
C/C++ -> Additional Module Dependencies
来添加每个模块接口。

这工作得很好,但我想知道是否有更好的方法来做到这一点,因为指定每个

.ixx.ifc
文件对于大型库来说会变得混乱。也许有一种方法可以将模块组合成可以导入的较大模块,而不必导入较小的模块?我尝试添加一个新模块并在其中添加其他模块,但我似乎仍然必须添加每个其他模块的
export import
文件作为依赖项。或者也许有一种方法可以一次添加多个
.ixx.ifc
文件作为依赖项?
    

c++ visual-studio c++20 visual-studio-2022 c++-modules
4个回答
1
投票
项目参考资料一般就足够了

在 Visual Studio 中,对依赖项项目的项目引用通常就足够了。

“...

在大多数情况下,您不需要指定此开关,因为项目系统会自动发现解决方案中的模块依赖关系

...” https://learn.microsoft.com/en-us/cpp/build/reference/module-reference?view=msvc-170


自动模块查找过程的详细信息

模块引用通过两阶段过程自动提供给编译器。

第一阶段

项目系统为正在构建的所有项目的所有导入模块生成json文件。

(然后,只需读取对象输出目录中的所有模块 json 文件,由正在构建的项目中的所有源导入的所有模块的所有模块依赖位置,就可以参见第二阶段)。

第二阶段

在此阶段,构建系统具有正在构建的所有项目中使用的每个模块的 ifc 文件的位置。有了这些信息,所有 cl /reference 参数都会在编译期间自动添加。

因此,通常不需要添加 /reference 参数。

https://lists.isocpp.org/sg15/att-1234/C___20_Modules_Build_in_Visual_Studio.pdf


0
投票
.ixx.ifc

的 lib 项目,另一个是名为

util
的主项目。如果您希望
main
位于主项目中,则需要将
import util;
项目设置为
util
的引用。
如何:

Solution Explorer

中,右键单击主项目树下的References,单击Add Reference...,现在您可以添加所有需要的项目作为参考(您可以一次选择所有参考项目)。 这种方法的好处是,如果在

main

中修改了任何代码,

util
项目将首先编译,如果您只是构建
util
项目,Visual Studio 将自动创建构建依赖项。您可以通过右键单击
解决方案资源管理器
中的
main
项目来检查它,选择构建依赖项 - >项目依赖项


0
投票
main

示例:

/scanDependencies

https://learn.microsoft.com/en-us/cpp/build/reference/scandependencies?view=msvc-170


-1
投票
/scanDependencies $(SolutionDir)utils\$(IntDir)

。要导入多个模块,请为每个文件包含一个单独的 /reference 选项。您可以参考文档:

/reference(使用命名模块IFC)

© www.soinside.com 2019 - 2024. All rights reserved.