我正在尝试修改我的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文件,因此需要能够编译这两个文件
答案 0 :(得分:2)
你没有给我们太多的帮助,但我会猜测。我认为您已将source/systemFuncs.cpp
添加到CXX_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 $@ -c $< -m32 -O0 -g $(CXXFLAGS)
幸运的是,这将证明原始但有效。稍后可以进一步改进。
修改:
如果两组文件名必须在一个变量(CXX_SOURCES
)中,您可以将它们分开:
CC_SOURCES := $(filter %.cc, $(CXX_SOURCES))
CPP_SOURCES := $(filter %.cpp, $(CXX_SOURCES))
这样就够了吗?
答案 1 :(得分: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)