假設我有這樣的:有沒有辦法通過編譯器的命令行來添加代碼?
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