2012-07-08 55 views
1

我們在「c」中有很好的代碼庫。現在,我們正在向所有新模塊遷移到C++。我有一個案例在舊的C代碼庫中使用幾個C++類。個別地,兩種工作即C++模塊和c模塊單獨工作並給出所需的o \ p。MakeFile.am:混合c和C++,新錯誤

當我將它們混合在一起,即在A.c中調用C++類時,它會拋出大量與舊代碼有關的錯誤。

在我們的makefile.am中,我們之前曾經有過一個選項cc = gcc,現在我們在它拋出了一些錯誤之後將它改爲cc = g ++。最後make makefile.am創建一個lib,讓我們說libx.a. makefile.am包含各種較早的源文件,即A.c,x.c,y.c ....

我修復了最初在A.c,x.c下的錯誤,假設它們是用新的g ++編譯器。現在,它開始在x.c下拋出錯誤,就像這樣我們有各種源文件。

它修復所有這些問題非常繁瑣。我相信iam錯過了一些與這些錯誤相關的編譯器標誌選項。現在,大多數這些錯誤都是類型錯誤,我使用static_cast轉換它們。除此之外,很少有其他錯誤。但是,代碼是c中的一個工作代碼,它只是混合和變化的makefile會拋出這些錯誤。

問: 1.如何擺脫這些錯誤? 2.是否有任何我需要使用的編譯器標誌以最小的努力繼續工作? 3.這些過程中有沒有iam做錯的事情? 4.你有什麼改變makefile.am,你有人建議?

對此的任何幫助表示讚賞。如果Q不清楚,請告訴我。

注意:我們使用autoreconf,configure和make來運行我們的應用程序。

問候, Santhosh

+0

正在打印的錯誤是什麼?另外,從我的個人經驗來看,g ++應該沒有編譯C代碼的實際問題,所以知道這些錯誤會有很大幫助。 – sean 2012-07-08 07:48:40

+1

您不應該在Makefile.am中分配'CC'或'CXX'。這些是用戶定義的變量,應在配置運行時分配。 – 2012-07-19 14:47:28

回答

2

作將使用要麼取決於文件的擴展名$CC$(CXX),並且可以同時使用兩種。例如,以*.cpp結尾的文件使用$(CXX)進行編譯,文件以*.c$(CC)結尾。因此,您不必將全局設置爲ccCCg++,除非您的C代碼被適當修改爲編譯爲C++。

+0

juanchopanza:我試過你提到的方式,即我從makefile.am中刪除了cc。製作makefile。但是,它引發了很多與系統有關的錯誤,包括EX:/usr/include/stdio.h – Santhosh 2012-07-08 13:29:40

+0

@Santhosh你應該使用'CC'和'C++'代碼''用'CXX'來編譯'C'代碼。 – juanchopanza 2012-07-08 13:31:29

+0

我相信,我確切地陳述了問題陳述。我有很多早期工作的源文件,都是c文件。現在,我添加了調用C++類的代碼。 Makefile.am沒有任何CC標誌。它的配置是創建具有相關CC標誌的Makefile.in和Makefile。我仍然收到錯誤。我相信iam錯過了一些簡單的事情。讓我知道。 – Santhosh 2012-07-08 18:06:50