【发布时间】:2021-03-21 06:57:07
【问题描述】:
我有一个由多个 c++ 文件组成的项目。我需要将所有这些文件合并为一个main.cpp 文件并通过网络发送一个文件。另一端的接收者将编译并运行该文件:
gcc main.cpp
./a.out
注意,另一端的接收者是一个程序,只需要一个文件,不会改变他的编译指令。
例如:假设我有以下 2 个文件:
main.cpp:
#include <iostream>
#include <vector>
#include <my_utils.hpp>
int main() {
std::vector<int> v = GetVector();
court << v.size() << endl;
return 0;
}
my_utils.hpp:
#pragma once
#include <vector>
std::vector<int> GetVector() {...}
void ProcessVector(const vector<int>& v) {...}
问题:是否有预处理命令可以将这两个文件合并为一个以获得以下结果:
// merged.cpp
// the recipient can compile and run this file
#include <iostream>
#include <vector>
std::vector<int> GetVector() {...}
void ProcessVector(const vector<int>& v) {...}
int main() {
std::vector<int> v = GetVector();
cout << v.size() << endl;
return 0;
}
标准预处理器会合并所有内容,包括 <vector> 包含的大量代码。我想要的是将多个文件合并为一个,其中只包含我自己定义的函数。
可选:如果我没有在我的主程序中使用ProcessVector,预处理器是否可以从最终合并文件中排除该函数?
【问题讨论】:
-
如果您使用的是 linux 或类似系统,您可以使用
cat file1 file2 > result将多个文件合并为一个。这个操作的目的是什么? -
请为您为什么想要/需要合并文件的问题添加一些背景信息。
-
@Human-Compiler 抱歉,不需要
-
您想自动提交大量组合项目到在线编码竞赛?一种可能的算法可能是创建作为项目一部分的所有头文件的列表,
cat所有头文件后跟所有源文件,并删除所有引用项目头文件之一的#include行,例如使用@ 987654332@。当然,将所有代码组合到一个大的编译单元中编译可能会与单独编译模块产生不同的结果。您甚至可能会遇到正常编译不会发生的错误。
标签: c++ include preprocessor