假设我有这样的:有没有办法通过编译器的命令行来添加代码?
int main() { return a; }
,我想打电话给编译器,并把它编译:
g++ a.cpp --PREPEND-CODE-FLAG="int a = 5;"
是有办法做到这一点?
请注意,我知道我可以通过命令行插入a
的预处理器定义,但我正在寻找一种方法将真正的C++代码添加到当前的翻译单元。
目前我生成与该代码的单独报头和我包括其与-I
标志克++ /铛
假设我有这样的:有没有办法通过编译器的命令行来添加代码?
int main() { return a; }
,我想打电话给编译器,并把它编译:
g++ a.cpp --PREPEND-CODE-FLAG="int a = 5;"
是有办法做到这一点?
请注意,我知道我可以通过命令行插入a
的预处理器定义,但我正在寻找一种方法将真正的C++代码添加到当前的翻译单元。
目前我生成与该代码的单独报头和我包括其与-I
标志克++ /铛
你已经标记有几个标签属于不同的C++实现,这表明这个问题你正在寻找一个跨平台的解决方案。没有存在。
该标准未指定如何将编译单元传递给编译器;它从不认为翻译单元是例如单个文件。在Unix可用
{
echo 'int a = 5';
echo '#line 1 a.cpp'
cat a.cpp
} | g++ -Wall -x c++ -
,将工作(有少许变化)与大多数C++编译器:如果您使用g++
与标准的外壳,你可以,例如,从几个命令的执行构成一个翻译单元平台,但显然不适合Windows平台。也许其他的事情会是。但是,无论您使用哪种解决方案,都将针对您所在的环境单独制作。
我接受这个,因为...因为我怀疑我所寻找的东西不存在。 – onqtam
$ g++ -DPREPENDED_CODE="int a = 5;" nod.cpp
$ ./a.out
$ echo $?
5
$
其中nod.cpp是:
PREPENDED_CODE
int main()
{
return a;
}
没有“当前转换单元”,你可以将多个文件编译 – Drop
什么情况下使用此的调用? –
@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