相关疑难解决方法(0)

#include所有.cpp文件到一个编译单元?

我最近有理由使用常规的Debug和Release配置来处理一些Visual Studio C++项目,还有'Release All'和'Debug All',这是我以前从未见过的.

事实证明,项目的作者有一个ALL.cpp,其中#includes所有其他.cpp文件.*所有配置只构建一个ALL.cpp文件.它当然被排除在常规配置之外,并且常规配置不构建ALL.cpp

我只是想知道这是否是一种常见做法?它带来了什么好处?(我的第一反应是闻起来很糟糕.)

您可能会遇到哪些陷阱?我能想到的是,如果你的.cpps中有匿名命名空间,它们不再是那个cpp'私有',但现在也可以在其他cpps中看到了吗?

所有项目都构建了DLL,因此在匿名命名空间中存储数据不是一个好主意,对吧?但功能会好吗?

干杯.

c++ build-process build visual-studio

71
推荐指数
3
解决办法
2万
查看次数

团结的利弊是什么?

从一家新公司开始,我注意到他们在我们的大部分解决方案中使用了统一cpp文件,我想知道是否有人能够给出一个明确的理由,说明为什么以及如何加快构建过程?我原以为在Unity文件中编辑一个cpp文件会强制重新编译所有这些文件.

c++ build-process compilation

32
推荐指数
2
解决办法
3万
查看次数

使用gcc预编译头的奇怪行为

我遇到麻烦让预编译的头文件工作,所以我提出了以下最小工作示例.

这是头文件 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中的错误,还是我们应该使用这样的预编译头文件?在任何一种情况下,我认为知道它是有用的..

c++ gcc precompiled-headers

6
推荐指数
2
解决办法
1154
查看次数