2016-09-09 44 views
0

假设我有这样的:有没有办法通过编译器的命令行来添加代码?

int main() { return a; } 

,我想打电话给编译器,并把它编译:

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

是有办法做到这一点?

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

目前我生成与该代码的单独报头和我包括其与-I标志克++ /铛

+1

没有“当前转换单元”,你可以将多个文件编译 – Drop

+3

什么情况下使用此的调用? –

+0

@Ben相信我 - 有一个。我正在尝试针对[此问题](https://github.com/google/googletest/blob/master/googletest/docs/V1_7_Primer.md#important-note-for-visual-users)问题[我的库](https://github.com/onqtam/doctest)通过构建系统(请注意,它不仅适用于Visual Studio - 它会影响所有平台和编译器)。 我想强制将静态库的每个目标文件链接到最终的dll /可执行文件中,并且我希望它在cmake中编码。 – onqtam

回答

3

你已经标记有几个标签属于不同的C++实现,这表明这个问题你正在寻找一个跨平台的解决方案。没有存在。

该标准未指定如何将编译单元传递给编译器;它从不认为翻译单元是例如单个文件。在Unix可用

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

,将工作(有少许变化)与大多数C++编译器:如果您使用g++与标准的外壳,你可以,例如,从几个命令的执行构成一个翻译单元平台,但显然不适合Windows平台。也许其他的事情会是。但是,无论您使用哪种解决方案,都将针对您所在的环境单独制作。

+0

我接受这个,因为...因为我怀疑我所寻找的东西不存在。 – onqtam

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

其中nod.cpp是:

PREPENDED_CODE 

int main() 
{ 
    return a; 
} 
相关问题