作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定一个模块
// a-m.cc
export module A;
import B;
import C;
import "D.h";
...
有没有一种方法可以调用 gcc(类似于 -M 对 header 的作用)来列出对其他模块和导入 header (即 B、C 和“D.h”)的直接依赖关系?
最佳答案
[编辑]
似乎我们可以使用标志 -MMD
调用 gcc ,它还跟踪模块依赖性。鉴于我有一个示例项目,我生成它是这样的:
// partition.cpp
export module partition;
import :partition1;
export import :partition2;
export import :partition3;
export void Hello1() { _Hello1(); }
出于某种原因,我需要在编译主模块接口(interface)(如上所示的文件)之前编译模块分区,但也许这可以以某种方式规避。我像这样编译上面的文件:
g++-11 -std=c++20 -fmodules-ts -c -MMD partition.cpp
这会生成一个文件
partition.d
列出模块依赖项:
partition.o gcm.cache/partition.gcm: partition.cpp
partition.o gcm.cache/partition.gcm: partition:partition3.c++m \
partition:partition2.c++m partition:partition1.c++m
partition.c++m: gcm.cache/partition.gcm
.PHONY: partition.c++m
gcm.cache/partition.gcm:| partition.o
CXX_IMPORTS += partition:partition3.c++m partition:partition2.c++m \
partition:partition1.c++m
看起来很有希望,但还需要更多的研究。
./gcm.cache/usr/include/c++/11/iostream.gcm
或(对于本地模块单元)
./gcm.cache/,/my-module.gcm
.
gcm.cache/
目录由默认模块映射器使用。可以创建自己的模块映射器,但从我所做的阅读来看,这听起来像是一个复杂的过程,因为模块映射器本质上是一个 Web 服务器:
module;
#include <iostream>
export module mymodule;
import myothermodule;
export
{
[...]
}
预处理后,此文件将有~100000 行长,所有行都需要由预处理器处理。但是使用我的工具(或可能更高效的工具),模块解析工具只会读取前 9 行,文件的其余部分将被忽略。
关于c++ - 有没有办法用 gcc 查询直接的模块依赖关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66542797/
我是一名优秀的程序员,十分优秀!