Следующая команда печатает абсолютный путь к определенному заголовку C ++ в соответствии с тем, где, по мнению g ++, он находится.
echo \#include\<ham/hamsterdb.h\> | g++ -M -x c++-header - | grep hamsterdb.hpp | sed -e 's/-: //' -e 's/ \\//'
В моей системе это выводит: /usr/local/include/ham/hamsterdb.hpp
Я столкнулся с проблемой при попытке запустить это внутри Makefile, чтобы установить переменную:
FILE=$(shell echo \#include\<ham/hamsterdb.h\> | g++ -M -x c++-header - | grep hamsterdb.hpp | sed -e 's/-: //' -e 's/ \\//')
.PHONY spec
spec:
@echo $(FILE)
Это выводит новую строку. Я думаю, что это символ решетки ('#'), который мешает make; если я перепишу строку FILE = ...
следующим образом:
FILE=$(shell echo \#include\<ham/hamsterdb.h\>)
на выходе все равно будет ничего.