【问题标题】:windows equivalent of command substitution in makefilesWindows 等效于 makefile 中的命令替换
【发布时间】:2012-01-03 19:30:58
【问题描述】:

我想在我的程序的 about 框中显示当前构建(hg 修订)编号。我想过在代码中使用“定义”(std::string rev = REVISION;) 并通过 makefile 将值传递给 g++:

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

会像一个魅力,但我在 windows 上开发 windows,所以我的问题:如何在 windows 上创建这样的行为。

【问题讨论】:

  • 如果您使用的是 Cygwin 或 Mingw,虽然我认为您想要 -D 而不是 -d,但您发布的内容应该可以正常工作。
  • @Dave 当然,抱歉打错了

标签: windows makefile g++ command substitution


【解决方案1】:

如果您使用的是 g++,那么您的假设大部分是正确的,只是传递宏定义是使用 -D 选项完成的,而不是 -d。此外,Make 中的$(CPP) 通常指的是 C PreProcessor。 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)

【讨论】:

    猜你喜欢
    • 2020-08-18
    • 2012-08-29
    • 1970-01-01
    • 2016-10-02
    • 2010-09-08
    • 2016-01-26
    • 2018-07-03
    • 1970-01-01
    • 2017-09-07
    相关资源
    最近更新 更多