Windows эквивалент подстановки команд в make-файлах - PullRequest
1 голос
/ 03 января 2012

Я хочу отобразить номер текущей сборки (hg revision) в поле about моей программы.Я подумал об использовании «define» (std::string rev = REVISION;) в коде и передаче значения в g ++ через makefile:

$(CPP) -c main.cpp -o main.o -DREVISION=`hg id -i`

будет работать как чудо, но я разрабатываю для Windows для Windows, поэтому мой Q:как создать такое поведение на windows.

1 Ответ

2 голосов
/ 03 января 2012

Если вы используете 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)
...