【发布时间】:2021-07-14 00:51:36
【问题描述】:
我正在尝试使用预编译的头文件来加快以下链接的编译速度:https://codeforces.com/blog/entry/53909
我观察到头文件的预编译和 .cpp 程序的后续编译必须使用相同的 g++ 标志才能加速工作,这是有道理的。但是,将 c++ 标准显式设置为默认标准是行不通的。因此,使用g++ stdc++.h 和随后的g++ -std=c++14 program.cpp 进行预编译,g++ -std=c++14 和g++ program.cpp 都不起作用。
这对我来说没有意义,因为我知道我的编译器 x86_64-w64-mingw32-g++.exe(gcc 版本 10.2.0)默认符合 201402L (c++14) 标准,即我想使用g++ -dM -E -x c++ /dev/null | fgrep __cplusplus,并得到以下响应:
#define __cplusplus 201402L
所以,我的问题是,当 g++ 默认遵循 201402L 时,g++ 和 g++ -std=c++14 有什么区别?另外,我专门选择其中任何一个是否足够重要?
【问题讨论】:
-
它可能会创建所有使用的选项的记录(如哈希总和)并将其放入预编译的标头中,如果重新编译时不匹配,它将重新创建预编译的标头。
-
再想一想。
g++不默认为-std=c++<something>。 Afaik,它默认为-std=gnu++<something>。检查是否在使用和不使用-std=gnu++14的情况下进行编译时是否做出相同的选择 -
是的,g++ -std=gnu++14 和 g++ -std=gnu++1y(虽然已弃用)都有效,也就是说,预编译的头文件可以加速所有后续仅使用 g++ 的编译。跨度>
标签: gcc g++ c++14 precompiled-headers gcc10