我正在 Visual Studio 2022 中探索 C++20 的模块,并且正在研究外部模块;已在一个项目中编译的模块,我将其称为库项目,并在另一个项目中导入。据我了解,这可以通过例如将库项目编译为静态库并生成
.lib
文件来完成,然后可以将其作为依赖项添加到其他项目中。然后,要从库项目添加模块接口,我可以通过将其相应的 .ixx.ifc
文件添加到 C/C++ -> Additional Module Dependencies
来添加每个模块接口。
这工作得很好,但我想知道是否有更好的方法来做到这一点,因为指定每个
.ixx.ifc
文件对于大型库来说会变得混乱。也许有一种方法可以将模块组合成可以导入的较大模块,而不必导入较小的模块?我尝试添加一个新模块并在其中添加其他模块,但我似乎仍然必须添加每个其他模块的 export import
文件作为依赖项。或者也许有一种方法可以一次添加多个 .ixx.ifc
文件作为依赖项?在 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.ixx.ifc
的 lib 项目,另一个是名为
util
的主项目。如果您希望 main
位于主项目中,则需要将 import util;
项目设置为 util
的引用。如何:
在
Solution Explorer中,右键单击主项目树下的References,单击Add Reference...,现在您可以添加所有需要的项目作为参考(您可以一次选择所有参考项目)。 这种方法的好处是,如果在
main
中修改了任何代码,
util
项目将首先编译,如果您只是构建 util
项目,Visual Studio 将自动创建构建依赖项。您可以通过右键单击解决方案资源管理器中的
main
项目来检查它,选择构建依赖项 - >项目依赖项。