[英]How to modify this Makefile to build c and cxx files separately?
下面的Makefile对于C项目非常有效,但是当我们遇到带有.cpp
文件的目录时,我们发现第一个模式规则正在用于.cpp
文件。 我尝试了3或4次更改以获得所需的效果,但似乎找不到方法。 我想知道是否可以对以下规则进行任何细微改动,以便.cpp
文件是使用COMPILE_CXX_COMMAND
。
C_EXT ?= c
CXX_EXT ?= cpp
OBJ_EXT ?= o
C_SRCS := \
src/RT_Socket.c \
src/products.c
CXX_SRCS := \
src/BurnedInAddress.cpp \
src/DiskID.cpp \
C_OBJ_FILES += $(C_SRCS:.$(C_EXT)=.$(OBJ_EXT))
CXX_OBJ_FILES += $(CXX_SRCS:.$(CXX_EXT)=.$(OBJ_EXT))
$(ARCHIVE_FILENAME) : $(C_OBJ_FILES) $(CXX_OBJ_FILES)
$(CREATE_ARCHIVE_COMMAND)
$(LIBRARY_FILENAME) : $(ARCHIVE_FILENAME)
$(CREATE_LIBRARY_COMMAND)
%.$(OBJ_EXT) : $(C_SRCS)
$(COMPILE_C_COMMAND)
%.$(OBJ_EXT) : $(CXX_SRCS)
$(COMPILE_CXX_COMMAND)
编辑:我想补充一点,我尝试用OBJ
文件列表替换模式目标,并且它可以工作。
$(C_OBJ_FILES) : $(C_SRCS)
$(COMPILE_C_COMMAND)
$(CXX_OBJ_FILES) : $(CXX_SRCS)
$(COMPILE_CXX_COMMAND)
但是,这产生了新的问题。 我们必须使用某些不同版本的Make,并且每当没有.cpp
文件时,其中一个就会失败并显示以下错误:
依赖线上没有目标。 停止。
它引用以下行: $(CXX_OBJ_FILES) : $(CXX_SRCS)
Gnu make在这种情况下似乎没有问题,而我们的另一个(OPUS Make)确实有问题。 谁能想到解决方法?
您可以使用后缀规则 :
CC = gcc
CFLAGS = -O2 -Wall
CXX = g++
CXXFLAGS = -std=c++11 -O3 -Wall
OBJS = cobj1.o cobj2.o cppobj1.o
.c.o:
$(CC) $(CFLAGS) -c $< -o $@
.cpp.o:
$(CXX) $(CXXFLAGS) -c $< -o $@
添加
CXX_OBJ_EXT ?= obj
更换
CXX_OBJ_FILES += $(CXX_SRCS:.$(CXX_EXT)=.$(OBJ_EXT))
CXX_OBJ_FILES += $(CXX_SRCS:.$(CXX_EXT)=.$(CXX_OBJ_EXT))
更换
%.$(OBJ_EXT) : $(CXX_SRCS)
%.$(CXX_OBJ_EXT) : $(CXX_SRCS)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.