- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
当前的 GCC 手册说
“如果 -MD 与 -E 一起使用,任何 -o 开关都被理解为指定依赖输出文件”
这不是我看到的:
>echo -n > dir/foobar.cpp
>g++ -E -MD -c dir/foobar.cpp -o dir/foobar.o
>cat dir/foobar.o
# 1 "dir/foobar.cpp"
# 1 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 1 "<command-line>" 2
# 1 "dir/foobar.cpp"
dir/foobar.o
没有依赖信息,只是预处理后的结果。
问题 1. 为什么?
此外,如果是这样,我仍然希望 dir/foobar.d
是正确的依赖信息。它不是:
>cat dir/foobar.d
foobar.o: dir/foobar.cpp /usr/include/stdc-predef.h
它应该是 dir/foobar.o:
... 当我不使用 -E
但使用 -E 时就是这样
,去掉目录前缀。
问题 2. 为什么?
最佳答案
我尝试重复您执行的步骤。我用这个例子来检查一下:
// test.cpp
#include "boost/bimap.hpp"
#include "boost/container/map.hpp"
#include "boost/container/vector.hpp"
int main(int argc, char* argv[]) {
boost::bimap<int,int> b;
boost::container::map<int,int> m;
boost::container::vector<int> v;
return 0;
}
然后我尝试运行以下命令:
g++ -MD -E -o test.d test.cpp
结果是经过处理的输出。另一方面,当我运行这个命令时:
g++ -MD -E test.cpp -o test.e
结果是:
从我的角度来看,这显然是一个错误:要获得清晰的依赖项列表,您不仅需要以正确的顺序运行参数,还需要修剪结果以删除 NULL 字符及其后的所有内容。
重要的一点是我的版本是g++ (Debian 4.7.2-5) 4.7.2
,虽然已经有4.8.2
和这样的版本4.9.0
(开发中)。如果这些版本也有此错误,您可以自由地让他们知道他们有 Unresolved 问题。
编辑
关于你的第二个问题,我收到了这样的信息:
test.o: Workspaces/test.cpp /usr/include/boost/bimap.hpp \
/usr/include/boost/bimap/bimap.hpp /usr/include/boost/config.hpp \
/usr/include/boost/config/user.hpp \
...
和你一样。我认为问题在于,您只将这两个文件名作为参数传递:源文件名和输出文件名。输出的名称只描述了当前结果的去向,而不是 .o 文件应该如何命名:
If `-MD' is used in conjunction with `-E', any `-o' switch is
understood to specify the dependency output file (but *note
-MF::), but if used without `-E', each `-o' is understood to
specify a target object file.
来自 here .
因此,您基本上要么指定目标文件(不带 -E
),要么指定依赖文件(带 -E
),然后 g++ 为 假定一些默认名称。 o
文件。
关于c++ - GCC -E -MD 有错误还是我遗漏了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21211569/
我正在尝试运行某人给我的一些 C++ 代码。起初有一个指向 istream 文件的断开链接,我通过添加包含路径修复了这个问题: C:\Program Files (x86)\Embarcadero\R
谁能告诉我如何防止 .git 目录的内容被上传到 PyPi。我的 MANIFEST.in 看起来像这样: global-include *.py *.js *.rst *.html *.css *.l
最近在 typescript 项目的VSCode中遇到如下情况: 文件:some-interface.ts // no import statements have been skipped. Thi
为我找到这个问题的合适标题有点困难,所以也许这个例子会澄清我的问题。 我正在发出 ajax 请求以将一些变量从 JS 传递到 PHP。这些变量之一是带有一些选项的 URL,即 https://www.
我是一名优秀的程序员,十分优秀!