Как изменить этот Makefile для сборки файлов c и cxx отдельно? - PullRequest
0 голосов
/ 09 мая 2018

Следующий 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).Кто-нибудь может подумать об обходном пути?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Добавлено

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)
0 голосов
/ 09 мая 2018

Вы можете использовать суффиксные правила :

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 $@
...