2016-05-11 4 views
0

Я вижу в моей текущей кодовой базе 2 модели в Makefiles:листинга .cpp или .o в Makefile

  1. список всех CPP файлы
  2. список всех 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?

ответ

2

Если вы определяете SRCS, то правило OBJS = $(SRCS:.cpp=.o) определяет OBJS, заменяя суффиксы.

Если вы определяете OBJS, тогда Make знает, что файл .o может быть создан путем компиляции файла .cpp.

В любом случае все в порядке. Было бы неплохо объединить и использовать один стиль в данном проекте.

+0

Я знаю, '' OBJS = $ (SRCS: .cpp = .o) 'rule определяет' OBJS' из 'SRCS', заменяя суффиксы., Но мои вопросы: зачем кому-либо добавлять как' SRCS', так и ' OBJS', если их достаточно? – Felics

+0

@ Феликс: Ну, я бы не стал перечислять все дважды, надеюсь. Один из них используется для неявного определения другого. Неважно, в каком направлении вы направляетесь: SRCS-> OBJS или OBJS-> SRCS. –

+0

Как работает OBJS-> SRCS? Например, если у меня есть в той же папке src1.cpp и src1.cc и src1.c, и я перечисляю OBJS = src1.o, какой из файлов скомпилирован? Являются ли правила конверсий для SRCS-> OBJS и OBJS-> SRCS перечисленными в любом месте? – Felics

Смежные вопросы