在这个Makefile中,我不知道如何在同一个Makefile中混合C和C++编译出c对象。如果我首先编译 C 对象,然后运行这个 Makefile,它就可以工作。谁能帮我解决这个问题吗?提前致谢!
CXX = g++
CXXFLAGS = -Wall -D__STDC_LIMIT_MACROS
SERVER_SRC = \
main.cpp
SERVER_SRC_OBJS = ${SERVER_SRC:.cpp=.o}
REDIS_SRC = \
$(HIREDIS_FOLDER)/net.c \
$(HIREDIS_FOLDER)/hiredis.c \
$(HIREDIS_FOLDER)/sds.c \
$(HIREDIS_FOLDER)/async.c
REDIS_SRC_OBJS = ${REDIS_SRC:.c=.o}
.SUFFIXES:
.SUFFIXES: .o .cpp
.cpp.o:
$(CXX) $(CXXFLAGS) -I$(HIREDIS_FOLDER) \
-c $< -o $*.o
all: server
net.o: net.c fmacros.h net.h hiredis.h
async.o: async.c async.h hiredis.h sds.h dict.c dict.h
hiredis.o: hiredis.c fmacros.h hiredis.h net.h sds.h
sds.o: sds.c sds.h
server: $(SERVER_SRC_OBJS) $(REDIS_SRC_OBJS)
mkdir -p bin
$(CXX) $(CXXFLAGS) -o bin/redis_main \
-I$(HIREDIS_FOLDER) \
$(REDIS_SRC_OBJS) \
$(SERVER_SRC_OBJS) \
-lpthread \
-lrt \
-Wl,-rpath,./
.PHONY: clean
clean:
$(RM) -r bin/redis_main
$(RM) ./*.gc??
$(RM) $(SERVER_SRC_OBJS)
$(RM) $(REDIS_SRC_OBJS)
G++ 可以并且将会很好地编译 .c 和 .cpp 源文件。
你什么really需要做的是添加“服务器”目标的依赖项。例如:
OBJ = net.o hiredis.o sds.o async.o
...
all: server
server: $(OBJ)
有一些非常好的提示本指南 http://wiki.wlug.org.nz/MakefileHowto.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)