c/c++开发分享如何编写混合C和C ++的makefile

在这个Makefile中,我不知道如何在混合C和C ++的同一个Makefile中编译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源文件就好了。

    真正需要做的是为“服务器”目标添加依赖项。 例如:

     OBJ = net.o hiredis.o sds.o async.o ... all: server server: $(OBJ) 

    这个Howto中有一些非常好的提示。

    您可以通过首先编译C文件然后直接编译CPP文件来实现。 这可能有效(至少在我的一个项目中有效):

     CXX = g++ CC = gcc CFLAGS = -Wall -c CXXFLAGS = -Wall -D__STDC_LIMIT_MACROS OUTPUTDIR = ./bin/ MKDIR = mkdir -p $(OUTPUTDIR) OBJECTC = redis.o CSOURCES =  $(HIREDIS_FOLDER)/net.c  $(HIREDIS_FOLDER)/hiredis.c  $(HIREDIS_FOLDER)/sds.c  $(HIREDIS_FOLDER)/async.c CXXSOURCES =  main.cpp all: server server: $(MKDIR) $(CC) $(CSOURCES) $(CFLAGS) -o $(OUTPUTDIR)$(OBJECTC) $(CXX) $(OUTPUTDIR)$(OBJECTC) $(CXXSOURCES) -o $(OUTPUTDIR)server .PHONY: clean clean: $(RM) -rf $(OUTPUTDIR) $(RM) ./*.gc?? $(RM) ./*.o 

    如果您看到更合适的方法,请随意更改它:)

    需要了解更多c/c++开发分享如何编写混合C和C ++的makefile,也可以关注C/ C++技术分享栏目—猴子技术宅(www.ssfiction.com)

      以上就是c/c++开发分享如何编写混合C和C ++的makefile相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/957959.html

      发表评论

      邮箱地址不会被公开。 必填项已用*标注