gpt4 book ai didi

c++ - 如何编写混合 C 和 C++ 的 makefile

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:58:20 25 4
gpt4 key购买 nike

在这个 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)

this Howto 中有一些非常好的技巧.

关于c++ - 如何编写混合 C 和 C++ 的 makefile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8653860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com