2012-01-03 74 views
1

我想在我的程序的左右框中显示当前的编译(hg修订版)编号。我想过使用一个“定义” (std::string rev = REVISION;)代码,并传递给G ++通过生成文件的值:等同于makefile中命令替换的窗口

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

将工作就像一个魅力,但即时通讯为Windows开发Windows,所以我问:如何创建这样在Windows上的行为。

+0

如果您使用Cygwin或Mingw,您发布的内容应该可以正常工作,但我认为您想要的是-D不是-d。 – 2012-01-03 19:44:23

+0

@Dave当然,抱歉是一个错字 – Valerij 2012-01-03 19:56:08

回答

2

如果您使用的是g ++,那么您的假设大部分都是正确的,除了使用-D选项而不是-d来传递宏定义。另外,Make中的$(CPP)通常指C预处理器。 C++编译器是$(CXX)

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

关于命令替换,如果你在UNIX上下的兼容层运行构建,像CygwinMinGW它应该工作的罚款。如果不是这样,则可以避免使用命令替换,并将hg id -i的结果按照字面意思传递给编译器。如下:

REVISION := $(shell hg id -i) 

... 
    $(CXX) -c main.cpp -o main.o -DREVISION=$(REVISION)