Строка makefile `test -f`

0

У меня есть Makefile со следующей строкой:

 $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ 'test -f '$<' || echo '$(SRCDIR)/''$<

Можете ли вы объяснить мне, что делает эта линия?

Примечание. Файл Makefile взят отсюда: https://projects.coin-or.org/BuildTools/wiki/user-examples

Эта страница определяет это:

Общие правила компиляции (например,.co) могут выглядеть несколько сложными. Но при этом Makefile также может использоваться людьми, которые работают с компиляторами MS (например, cl) под Cygwin, поскольку эти компиляторы не понимают пути каталога типа UNIX. В таком случае CYGPATH_W будет настроен на "cygpath -w" по настройке, иначе это будет просто "эхо".

Я не собираюсь работать с компиляторами MS.

Теги:
makefile

1 ответ

3
Лучший ответ

test -f - это Unix-ism, который вернет true, если указанный файл существует, а false - если нет. "$ <" - это исходный файл правила make. Итак, test -f '$<' || echo '$(SRCDIR)/' test -f '$<' || echo '$(SRCDIR)/' будет проверять наличие исходного файла, а если он не существует, будет эхо $(SRCDIR)/ за ним следует имя файла. Это будет вход для фактического компилятора.

Это в основном говорит: "Если файл X существует в локальном каталоге, тогда скомпилируйте его. В противном случае (это то, что делает ||), скомпилируйте файл X, расположенный в каталоге $(SRCDIR) ". Таким образом, вы можете поместить весь ваш источник в подкаталог, а затем переопределить определенные файлы, поместив новые копии в тот же каталог, что и Makefile.

  • 0
    Итак, давайте предположим, что все исходные файлы находятся в одном каталоге, в котором находится Makefile, если я хорошо понимаю, я мог бы заменить строку на $(CXX) $(CXXFLAGS) $(INCL) -c -o $@ '$<' .
  • 0
    Еще один вопрос: это необходимо?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню