Если вы используете g ++, то ваше предположение в основном верно, за исключением того, что передача определения макроса выполняется с использованием опции -D
, а не -d
. Кроме того, $(CPP)
в Make обычно относится к C PreProcessor. Компилятор C ++ - $(CXX)
.
$(CXX) -c main.cpp -o main.o -DREVISION=`hg id -i`
Что касается подстановки команд, она должна работать нормально, если вы запускаете сборку в слое совместимости с UNIX, например Cygwin или MinGW . Если нет, вы можете вообще не использовать подстановку команд и передавать результат hg id -i
в компилятор буквально, например, следующим образом:
REVISION := $(shell hg id -i)
...
$(CXX) -c main.cpp -o main.o -DREVISION=$(REVISION)