是否有一个代码预处理工具可以将多个用户定义的包含项(不包含任何系统)合并到一个文件中?

水银0114

我有一个包含多个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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档