Я вижу в моей текущей кодовой базе 2 модели в Makefiles:листинга .cpp или .o в Makefile
- список всех CPP файлы
- список всех CPP файлов, но с расширением переоделись в
.o
Пример:
ex1.mk
...
SRCS=src1.cpp src2.cpp ...
...
ex2.mk
...
OBJS=src1.o src2.o ...
...
Из моего понимания новичку на Makefiles в 2 подхода кажутся взаимозаменяемыми, и любой из них достаточно. Глядя на учебники о Makefiles я могу видеть их обоих в том же файле, иногда, как:
OBJS = $(SRCS:.cpp=.o)
В чем разница между SRCS
и OBJS
? Нужно ли определять как SRCS
, так и OBJS
? Если да, то почему это работает, определяя только SRCS
или OBJS
? Если нет, как мне выбрать между определением SRCS
и OBJS
?
Я знаю, '' OBJS = $ (SRCS: .cpp = .o) 'rule определяет' OBJS' из 'SRCS', заменяя суффиксы., Но мои вопросы: зачем кому-либо добавлять как' SRCS', так и ' OBJS', если их достаточно? – Felics
@ Феликс: Ну, я бы не стал перечислять все дважды, надеюсь. Один из них используется для неявного определения другого. Неважно, в каком направлении вы направляетесь: SRCS-> OBJS или OBJS-> SRCS. –
Как работает OBJS-> SRCS? Например, если у меня есть в той же папке src1.cpp и src1.cc и src1.c, и я перечисляю OBJS = src1.o, какой из файлов скомпилирован? Являются ли правила конверсий для SRCS-> OBJS и OBJS-> SRCS перечисленными в любом месте? – Felics