2017-07-27 64 views
1

我想編譯源代碼,但我需要將extern「C」添加到其他包中的許多頭文件中。所以我必須同時保持這些完好無損。 我想知道的是,我可以添加如何在編譯時將源代碼添加到行,但保持不變

#ifdef __cplusplus 
extern "C" { 
#endif 

在頁眉和

#ifdef __cplusplus 
} 
#endif 

頁腳爲每頭我感興趣的?
我能想到的是使用$awk將這些文件傳遞給編譯器,但我無法想出詳細信息。
是否有任何已知的示例或我可以挖掘的內容?
非常感謝。

回答

0

您可以創建封裝而不是包括問題的標題是這樣的:

extern "C" { 
#include "header.h" 
} 

在自己的代碼,那麼你包括包裝,而不是原來的標題。

您可以使用一次性腳本自動創建這些包裝器標頭,這應該很簡單。在bash,例如,我只是這樣做:

for f in include/*; do echo -e "extern \"C\" {\n#include \""$f"\"\n}" > "include_wrappers/wrap_$f"; done 
+0

我不得不使用'對於f在include/*;做的awk「BEGIN {打印 「的#ifdef __cplusplus \ nextern \」 C \」 { \ n#endif \ n「} {print} END {print」#ifdef __cplusplus \ n} \ n#endif「}'」include/$(basename $ f)「>」include_wrappers/$(basename $ f)「; done',因爲我認爲這個問題可能出在我的代碼沒有直接包含的頭文件中,而是由我使用的頭文件帶入。所以我添加頁眉和頁腳到所有的頭文件,但它仍然不能編譯。我想我必須考慮一下,如果g ++與extern「C」真的給出了與gcc相同的環境。謝謝你。 – WJin

+0

@WJin在我看來,你已經生成了具有相同名稱的文件。你怎麼能確定新文件包含而不是舊文件? –

+0

編譯器以相同的順序搜索include目錄,並在-I選項中列出目錄。 – WJin