2012-03-20 278 views
1

我想修改我的makefile支持的.cpp和.cc,不過,我不斷收到錯誤,如修改makefile編譯.CC和.cpp文件

​​

我修改現有的makefile支持.cc,我想讓它也編譯.cpp,但我不確定如何。這最初是一個nacl項目的make文件。

如何編譯.cpp和.cc?

相關內容生成文件:

x86_32_OBJS:=$(patsubst %.cc,%_32.o,$(CXX_SOURCES)) 
$(x86_32_OBJS) : %_32.o : %.cc $(THIS_MAKE) 
    $(CXX) ${INCDIRS} -o [email protected] -c $< -m32 -O0 -g $(CXXFLAGS) 

$(PROJECT)_x86_32.nexe : $(x86_32_OBJS) 
    $(CXX) -o [email protected] $^ -m32 -O0 -g $(CXXFLAGS) $(LDFLAGS) 

CXX_SOURCES既有.cc的文件和.cpp文件在其中,所以它需要能夠編譯兩個

回答

2

你還沒有給我們太多繼續,但我會猜測。我想你加source/systemFuncs.cppCXX_SOURCES。然後,讓打這行:

x86_32_OBJS:=$(patsubst %.cc,%_32.o,$(CXX_SOURCES)) 

它取代 「.CC」 與 「_32.o」,離開source/systemFuncs.cpp不變。然後嘗試將此名稱提供給預期爲「_32.o」的規則,並崩潰。

試試這個:

CPP_SOURCES += source/systemFuncs.cpp 

x86_32_CPP_OBJS:=$(patsubst %.cpp,%_32.o,$(CPP_SOURCES)) 

$(x86_32_CPP_OBJS) : %_32.o : %.cpp $(THIS_MAKE) 
    $(CXX) ${INCDIRS} -o [email protected] -c $< -m32 -O0 -g $(CXXFLAGS) 

幸運的是,這將證明原油,但有效。稍後可能進一步改進。

編輯:
如果文件名的兩套必須是一個變量(CXX_SOURCES),你可以像這樣把它們分開:

CC_SOURCES := $(filter %.cc, $(CXX_SOURCES)) 
CPP_SOURCES := $(filter %.cpp, $(CXX_SOURCES)) 

這是否足夠?

+0

我很抱歉,CXX_SOURCES不清楚。我更新了我的問題。我需要能夠編譯.cc和.cpp。您的答案只支持.cpp並忽略.cc文件。 – chadb 2012-03-20 05:08:10

+0

下定決心 - 始終使用一個擴展名。 – 2012-03-20 05:26:18

+0

@ Jonathan Leffler:不幸的是,我不能這麼做,項目(傳統上使用VS的傳統項目)同時具有.cc和.cpp。更改文件類型不是一個選項。 – chadb 2012-03-20 05:34:11

0

您可以創建單獨的,但(對於執行)相同的規則:

(我跳過THIS_MAKE,因爲它是在上面的代碼空的,但你可以將其添加)

# catch both 
x86_32_OBJS:=$(addsuffix _32.o,$(basename $(CXX_SOURCES))) 

# rule for .cc 
$(patsubst %.cc,%_32.o,$(filter %.cc,$(CXX_SOURCES))):%_32.o: %.cc 
    $(CXX) ${INCDIRS} -o [email protected] -c $< -m32 -O0 -g $(CXXFLAGS) 

# rule for .cpp 
$(patsubst %.cpp,%_32.o,$(filter %.cpp,$(CXX_SOURCES))):%_32.o: %.cpp 
    $(CXX) ${INCDIRS} -o [email protected] -c $< -m32 -O0 -g $(CXXFLAGS) 

$(PROJECT)_x86_32.nexe : $(x86_32_OBJS) 
    $(CXX) -o [email protected] $^ -m32 -O0 -g $(CXXFLAGS) $(LDFLAGS)