是否有一种代码预处理工具可以将多个用户定义的包含(无系统包含)合并到一个文件中?
Is there a code preprocessing tool that would merge multiple user defined includes (an no system includes) into one file?
我有一个由多个 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
,预处理器是否可以从最终合并文件中排除该函数?
我不知道有任何预处理器技术可以做到这一点,但还有其他可能性。我读到你只是想发送一个 compile-able main.cpp
文件用于在线编码竞赛,所以这就是我正在处理的。
如果您可以使用 command-line 工具,则只需使用 sed
。如果您将所有本地 header 包含更改为 #include "..."
,那么您可以:
sed '/#include ".*"/d' *.hpp *.cpp
它的作用是打印除具有 #include "..."
到 stdout
的行之外的所有行。所有 .hpp
文件都将在所有 .cpp
文件之前,因此原型应该不会有任何复杂性。然后您可以将此输出重定向到某个文件。
我有一个由多个 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
,预处理器是否可以从最终合并文件中排除该函数?
我不知道有任何预处理器技术可以做到这一点,但还有其他可能性。我读到你只是想发送一个 compile-able main.cpp
文件用于在线编码竞赛,所以这就是我正在处理的。
如果您可以使用 command-line 工具,则只需使用 sed
。如果您将所有本地 header 包含更改为 #include "..."
,那么您可以:
sed '/#include ".*"/d' *.hpp *.cpp
它的作用是打印除具有 #include "..."
到 stdout
的行之外的所有行。所有 .hpp
文件都将在所有 .cpp
文件之前,因此原型应该不会有任何复杂性。然后您可以将此输出重定向到某个文件。