我有一个包含多个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
主程序中使用,预处理器可以从最终合并文件中排除该功能吗?
我不知道有任何预处理器技术可以做到这一点,但是还有其他可能性。我读到您只是想发送一个可编译main.cpp
文件来进行在线编码竞赛,所以我正在使用这个文件。
如果您有权使用命令行工具,则只需使用即可sed
。如果将所有本地标头包含更改为#include "..."
,则可以执行以下操作:
sed '/#include ".*"/d' *.hpp *.cpp
这样做是它打印除了拥有线所有线#include "..."
对stdout
。所有.hpp
文件都将在所有.cpp
文件之前,因此原型应该不会有任何复杂性。然后,您可以仅将此输出重定向到某个文件。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句