1

我正在尝试修改我的 makefile 以支持 .cpp 和 .cc,但是,我不断收到错误消息,例如

target `source/systemFuncs.cpp' doesn't match the target pattern

我正在修改一个支持 .cc 的现有 makefile,我想让它也编译 .cpp,但我不确定如何。这最初是一个 nacl 项目的 make 文件。

如何编译 .cpp 和 .cc?

makefile的相关内容:

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

$(PROJECT)_x86_32.nexe : $(x86_32_OBJS)
    $(CXX) -o $@ $^ -m32 -O0 -g $(CXXFLAGS) $(LDFLAGS)

CXX_SOURCES 中同时包含 .cc 文件和 .cpp 文件,因此它需要能够同时编译这两个文件

4

2 回答 2

2

你没有给我们太多的继续,但我会做一个猜测。我想你添加source/systemFuncs.cppCXX_SOURCES. 然后使打这一行:

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

它将“.cc”替换为“_32.o”,并且保持source/systemFuncs.cpp不变。然后,Make 尝试将此名称输入到预期“_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 $@ -c $< -m32 -O0 -g $(CXXFLAGS)

运气好的话,这将被证明是粗糙但有效的。以后可能会有进一步的改进。

编辑:
如果两组文件名必须在一个变量(CXX_SOURCES)中,您可以像这样将它们分开:

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

够了吗?

于 2012-03-20T05:01:44.043 回答
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 $@ -c $< -m32 -O0 -g $(CXXFLAGS)

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

$(PROJECT)_x86_32.nexe : $(x86_32_OBJS)
    $(CXX) -o $@ $^ -m32 -O0 -g $(CXXFLAGS) $(LDFLAGS)
于 2012-03-20T08:48:33.080 回答