2012-03-20 131 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)