2011-07-18 53 views
3

問:什麼是一個基於.C/ .H項目轉換的最佳方式(這是強制編譯作爲C++通過makefiles)基於.cpp/ .hpp的項目?一個轉換的* .c/* H項目(編譯爲C++),以*的.cpp/* HPP

顯然,這是一個三步驟的過程。第一種方法是用* .c結尾重命名爲* .cpp;第二種方法是將* .h結尾的所有內容重新命名爲* .hpp。我遇到的問題是第三步 - 以某種方式構建文件/被命名(即myfile.c)的列表,然後遍歷每個受影響的文件並用每個文件替換舊文件名的每個實例新(myfile.c - > myfile.cpp)。顯然這必須完成,以便源文件仍然可以找到他們需要的一切。

有問題的源代碼,包括大約2700個人的源文件。

爲什麼我這樣做主要是因爲我移植說軟件包到Mac OS X,以及涉及的Xcode的原因。事情變得混亂不堪,試圖準確追蹤C,C++和相關頭文件(然後覆蓋C++編譯器的編譯器)。如果所有的C++都是* .cpp(相關聯的頭文件是* .hpp),那麼會更簡單一些,因爲那樣我就可以根據文件擴展名將Xcode保留在默認的編譯器設置下,並且所有的東西都應該可以正常工作,結束。

我也許應該也注意到,我知道精確的文件需要什麼轉換,因爲他們已經正確編譯並以健全的方式,如果我重寫的Xcode編譯爲C++。這不是一個問題 - 我的問題是試圖找出如何批量重命名所有文件,然後遍歷所有文件並更新#includes。

預先感謝您! -Keven Tipping

+1

你爲什麼要將.c文件編譯爲C++? –

+0

@Adam:因爲它們包含C++代碼? –

回答

1

沒有理由將這些C語言頭文件和源文件重命名爲C++,並且有很多理由不這樣做。只是三個許多:

理由1:C和C++是發散,不同的語言。強制編譯一個C文件,就好像它是C++一樣,有引入bug的風險。

理由2:Xcode中可以處理C,C++,C和C++混合在一起。

原因#3:C++可以很容易地調用C例程。您只需將這些C函數的聲明封裝在extern "C" { /* C declarations here */ }構造中即可。

+2

聽起來好像.c文件真的包含C++源代碼。 –

+1

我想你可能誤解了OP。我想他說他的項目已經*建設了。c文件作爲C++(反正bizarro),他想規範文件名。 –

+0

Quixoto是正確的。該項目已經構建爲一組* .c文件 - 僅僅是因爲makefile被設置爲強制將/ all/C文件編譯爲C++。如果你不強制將源代碼編譯爲C++,那麼它會慘敗 - 因爲* .c文件更多的是C++,那麼它們就是純C的。因此,我原來的問題 - 我正在尋找批量重命名所有* .c源文件和所有* .h源文件添加到它們的* .cpp和* .hpp等效項中,然後遍歷每個文件並確保#includes都指向更新的名稱。 –

6

你不需要弄亂標題。 filename.h是C++頭文件的完美名稱。

如果你不使用舊的makefile,但創建一個新的XCode項目,那麼你只有一步:

  • 重命名的* .c爲*的.cpp

如果makefile是正確編寫的(使用規則模式而不是特定的每個文件規則),那裏不應該有任何需要的更改。