使用clang预处理程序将C ++源文件连接为一个

问题描述 投票:1回答:1

在编码竞赛中,我必须将所有C ++代码复制/粘贴到一个html输入表单中,该代码是远程编译的。随着代码变大,我想将代码分成几个文件。

所以,我有几个C ++源文件,一个是main.cc,还有一些其他标头,例如f.h。我希望将这些源文件与单个源文件allinone.cc连接在一起,以便我可以使用clang++ allinone.cc进行编译。我猜这可以使用clang预处理程序来实现。

一个最小的例子是:

  • main.cc

    #include <iostream>
    using namespace std;
    
    #include "f.h"
    
    int main() { 
       f();
    }
    
  • f.h

    #pragma once
    #include <iostream>
    using namespacestd;
    
    void f() { 
      cout <<
    }
    

我能得到的最接近的是:

clang -E -nostdinc main.cc | grep -v "^#" > allinone.cc 

产生:

#include <iostream>
         ^~~~~~~~~~
1 error generated.

using namespace std;
using namespacestd;

void f() {
  cout <<
}

int main() {
   f();
}

-nostdinc选项成功避免了从标准包含中包含代码。但是,原始的#include <iostream>消失了,并且重复了namespace规格。

是否有一种方法可以调用clang预处理程序以实现直接描述的串联?

c++ clang preprocessor
1个回答
1
投票

clang -nostdinc做另一件事,不是您期望的。该键禁用包含搜索路径中的标准包含目录。因此,由于预处理器无法包含文件-nostdinc,在已知的包含搜索路径中找不到该文件,因此会出现错误。

您想要的是不可能实现的。您应该使用文件cat并手动清除结果,或者使用可以删除#include的特殊软件。我建议您只使用grepsortuniq的组合,然后将其删除并过滤掉#include到串联文件的顶部。

© www.soinside.com 2019 - 2024. All rights reserved.