我有一個c
項目,我一直在使用以下Makefile
建設。如何使用Make構建與某些C++代碼混合的c項目?
CC=gcc
CFLAGS= -g
LIBS= -lm
MOSEK_H= /home//work/mosek/6/tools/platform/linux32x86/h/
MSKLINKFLAGS= -lmoseknoomp -lpthread -lm
MSKLIBPATH= /home/work/mosek/6/tools/platform/linux32x86/bin/
all: learn
clean: tidy
rm -f learn
tidy:
rm -f *.o
learn: spl.o api.o mosek_qp_optimize.o
$(CC) $(CCFLAGS) spl.o api.o -o learn \
$(LIBS) -L $(MSKLIBPATH) $(MSKLINKFLAGS)
spl.o: spl.c
$(CC) -std=c99 -c $(CFLAGS) spl.c -o spl.o
mosek_qp_optimize.o: mosek_qp_optimize.c
$(CC) -c $(CFLAGS) mosek_qp_optimize.c -o mosek_qp_optimize.o -I $(MOSEK_H)
api.o: api.c api_types.h
$(CC) -c $(CFLAGS) api.c -o api.o
第三方C++代碼我需要使用的.cpp
文件(graph.cpp
,maxflow.cpp
,test.cpp
)和頭文件(graph.h
,block.h
)包括。獨立我可以使用以下編譯C++項目,它似乎工作正常。
g++ test.cpp graph.cpp maxflow.cpp
現在我需要在test.cpp
的main()
將代碼移植到原來c
項目api.c
。因此,我需要使用g++
編譯api.c
。
我試過,但它似乎以下不工作:
CC=gcc
CFLAGS= -g
LIBS= -lm
MOSEK_H= /home//work/mosek/6/tools/platform/linux32x86/h/
MSKLINKFLAGS= -lmoseknoomp -lpthread -lm
MSKLIBPATH= /home/work/mosek/6/tools/platform/linux32x86/bin/
MAXFLOW_H= /home/work/maxflow/
all: learn
clean: tidy
rm -f learn
tidy:
rm -f *.o
learn: spl.o api.o mosek_qp_optimize.o graph.o maxflow.o
$(CC) $(CCFLAGS) spl.o api.o mosek_qp_optimize.o graph.o maxflow.o -o learn \
$(LIBS) -L $(MSKLIBPATH) $(MSKLINKFLAGS)
spl.o: spl.c
$(CC) -c $(CFLAGS) spl.c -o spl.o
mosek_qp_optimize.o: mosek_qp_optimize.c
$(CC) -c $(CFLAGS) mosek_qp_optimize.c -o mosek_qp_optimize.o -I $(MOSEK_H)
api.o: api.cpp api_types.h
$(CC) -c $(CFLAGS) api.cpp -o api.o -I $(MAXFLOW_H)
graph.o: graph.cpp
$(CC) -c $(CFLAGS) graph.cpp -o graph.o -I $(MAXFLOW_H)
maxflow.o: maxflow.cpp
$(CC) -c $(CFLAGS) maxflow.cpp -o maxflow.o -I $(MAXFLOW_H)
任何想法,如何去了解呢?
你會錯誤地告訴我們確切的錯誤是什麼。猜測,你在某些函數聲明中忘了'extern「C」'。 – 2013-05-05 19:40:13
用'g ++'鏈接你的程序,即'$(CXX)' – 2013-05-05 19:40:26
在「MSKLINKFLAGS = ..」行中也有一個雜散的反斜線。 – 2013-05-05 19:41:39