繁体   English   中英

如何修改此Makefile分别构建c和cxx文件?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM