2016-09-09 76 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; 
} 
相關問題