如何编写混合C和c++的makefile
how to write makefile mixing C and C++
在这个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源文件。
真正需要做的是为"server"目标添加依赖项。例如:
OBJ = net.o hiredis.o sds.o async.o
...
all: server
server: $(OBJ)
可以先编译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
如果您看到更合适的方式,请随意更改:)
相关文章:
- 针对遗留库的链接:来自预制makefile的-lgfortranbegin
- 使用 Makefile 中的头文件编译 Pybind (不使用 cmake)
- 如何在使用Makefile构建后在cmd中运行该程序?
- Makefile g++ 使用命令行中的 -D 变量进行编译,默认值
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 如何在macOS上使用Makefile?
- Makefile 创建两个库 - 一个依赖于另一个
- 我将 Makefile 更改为 C++11 版本,但仍然收到列表初始值设定项错误
- Arduino-Makefile:编译器无法编译用户库 cpp 文件
- Makefile by ocaml 和 cpp 扩展名
- C++ 如何将两个 makefile 对象目标规则(位于另一个文件夹中)合并到一个目标/规则中?
- 从 Makefile 中的 $@ 获取文件名
- 如何使用 Makefile 使用 VTK 库编译项目?
- 在 Windows 10 下为 VTK 生成 Makefile 时,Qt mkspecs 的路径错误
- 如何在makefile中包含tensorflow c ++".so"文件?
- 有没有办法从Makefile访问VS Code c_cpp_properties.json文件中的定义
- 使用单个makefile编译C和C++
- 将makefile中的一个项中的多个类分组
- 使用makefile中的命令行输入
- 生成main.c和main.cpp的单个Makefile