C++ 有没有办法通过编译器的命令行预先编写代码?

C++ 有没有办法通过编译器的命令行预先编写代码?,c++,visual-c++,g++,clang,C++,Visual C++,G++,Clang,假设我有这个: int main() { return a; } 我想调用编译器并让它编译: g++a.cpp--PREPEND-code-FLAG=“int a=5;” 有办法做到这一点吗 注意,我知道我可以通过命令行插入一个预处理程序定义 A/COD>,但是我正在寻找一种方法来将真正的C++代码准备到当前的翻译单元。 目前我正在生成一个单独的头,用这个代码,我把它包含在 -i/Code > G++/CLAN/P>< P>标记中,您用几个不同的C++实现标记来标记这个问题,这表明您正在寻找一

假设我有这个:

int main() { return a; }
我想调用编译器并让它编译:

g++a.cpp--PREPEND-code-FLAG=“int a=5;”

有办法做到这一点吗

注意,我知道我可以通过命令行插入一个预处理程序定义<代码> A/COD>,但是我正在寻找一种方法来将真正的C++代码准备到当前的翻译单元。


目前我正在生成一个单独的头,用这个代码,我把它包含在 -i/Code > G++/CLAN/P>< P>标记中,您用几个不同的C++实现标记来标记这个问题,这表明您正在寻找一个跨平台的解决方案。没有

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

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

<>这将在UNIX平台上使用大多数C++编译器,但这显然不适用于Windows平台。也许其他事情会是这样。但是,无论你使用的解决方案都是为你正在工作的环境而单独制作的。

< P>你用几个不同的C++实现标记了这个问题,这表明你正在寻找一个跨平台的解决方案。没有

$ g++ -DPREPENDED_CODE="int a = 5;" nod.cpp
$ ./a.out
$ echo $?
5
$
该标准没有规定如何将翻译单元传递给编译器;例如,它从不假设翻译单元是单个文件。例如,如果将
g++
与标准shell一起使用,则可以通过执行多个命令组成翻译单元:

{
   echo 'int a = 5';
   echo '#line 1 a.cpp'
   cat a.cpp
} | g++ -Wall -x c++ - 
<>这将在UNIX平台上使用大多数C++编译器,但这显然不适用于Windows平台。也许其他事情会是这样。但是,无论您使用什么解决方案,都将针对您所处的工作环境单独制定

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

PREPENDED_CODE

int main()
{
    return a;
}
其中nod.cpp是:

PREPENDED_CODE

int main()
{
    return a;
}

没有“当前翻译单元”,因为您可以将多个文件传递给编译器调用。这是什么用例?@Ben trust me-有一个。我试图通过构建系统来解决这个问题(注意,它不仅适用于VisualStudio,还影响所有平台和编译器)。我想要一种非侵入性的方式将静态库的每个对象文件强制链接到最终的dll/可执行文件中,并且我想要用cmake编码。在cmake中,使用
configure\u file
命令…没有“当前翻译单元”当您可以将多个文件传递给编译器调用时,这是什么用例?@Ben trust me-有一个。我试图通过构建系统来解决这个问题(注意,它不仅适用于VisualStudio,还影响所有平台和编译器)。我想要一种非侵入性的方式将静态库的每个对象文件强制链接到最终的dll/可执行文件中,并且我想要它在cmake中编码。在cmake中,使用
configure\u file
命令…我接受这一点,因为。。。因为我怀疑我要找的东西不存在。我接受这一点,因为。。。因为我怀疑我要找的东西不存在。