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