有没有办法通过编译器的命令行预先添加代码?

时间:2016-09-09 17:13:38

标签: c++ visual-c++ g++ clang

假设我有这个:

int main() { return a; }

我想调用编译器并编译它:

g++ a.cpp --PREPEND-CODE-FLAG="int a = 5;"

有办法做到这一点吗?

请注意,我知道我可以通过命令行插入a的预处理器定义,但我正在寻找一种方法将实际的C ++代码添加到当前的翻译单元。

目前我正在使用该代码生成一个单独的标头,我将其包含在g ++ / clang的-I标志中

2 个答案:

答案 0 :(得分:3)

您已使用与不同C ++实施相关的多个标记来标记此问题,这表明您正在寻找跨平台解决方案。没有。

标准没有规定如何将翻译单元传递给编译器;它从不假设翻译单元是例如单个文件。如果您将g++与标准shell一起使用,例如,您可以通过执行多个命令来组成翻译单元:

{
   echo 'int a = 5';
   echo '#line 1 a.cpp'
   cat a.cpp
} | g++ -Wall -x c++ - 

对于Unix平台上可用的大多数C ++编译器,这将起作用(略有变化),但显然不适合Windows平台。也许其他的事情会是。但是,无论您使用何种解决方案,都将根据您工作的环境进行单独制作。

答案 1 :(得分:0)

$ g++ -DPREPENDED_CODE="int a = 5;" nod.cpp
$ ./a.out
$ echo $?
5
$

其中nod.cpp是:

PREPENDED_CODE

int main()
{
    return a;
}