我最近有理由使用常规的Debug和Release配置来处理一些Visual Studio C++项目,还有'Release All'和'Debug All',这是我以前从未见过的.
事实证明,项目的作者有一个ALL.cpp,其中#includes所有其他.cpp文件.*所有配置只构建一个ALL.cpp文件.它当然被排除在常规配置之外,并且常规配置不构建ALL.cpp
我只是想知道这是否是一种常见做法?它带来了什么好处?(我的第一反应是闻起来很糟糕.)
您可能会遇到哪些陷阱?我能想到的是,如果你的.cpps中有匿名命名空间,它们不再是那个cpp'私有',但现在也可以在其他cpps中看到了吗?
所有项目都构建了DLL,因此在匿名命名空间中存储数据不是一个好主意,对吧?但功能会好吗?
干杯.
从一家新公司开始,我注意到他们在我们的大部分解决方案中使用了统一cpp文件,我想知道是否有人能够给出一个明确的理由,说明为什么以及如何加快构建过程?我原以为在Unity文件中编辑一个cpp文件会强制重新编译所有这些文件.
我遇到麻烦让预编译的头文件工作,所以我提出了以下最小工作示例.
这是头文件 foo.h
#include <iostream>
using namespace std;
void hello() {
cout << "Hello World" << endl;
}
Run Code Online (Sandbox Code Playgroud)
我编译它g++ -c foo.h给我一个编译头foo.gch.我希望当我编译包含的以下源文件时foo.h,它应该选择标题foo.h.gch,我很好.
// test.cpp
#include <cstdio> // Swap ordering later
#include "foo.h" // ------------------
int main() {
hello();
}
Run Code Online (Sandbox Code Playgroud)
但令人惊讶的是,这不是使用编译foo.h.gch,而是使用 foo.h.要验证您可以将其编译为g++ -H test.cpp
但是,如果我更改包含的头文件的顺序如下:
// test.cpp
#include "foo.h" // ------------------
#include <cstdio> // Ordering swapped
int main() {
hello();
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我编译使用g++ -H test.cpp,它编译foo.h.gch,哇!
所以我想知道这是否是GCC中的错误,还是我们应该使用这样的预编译头文件?在任何一种情况下,我认为知道它是有用的..