【问题标题】:How to use environment variable PROGRAMFILES(X86) in a GNU makefile?如何在 GNU makefile 中使用环境变量 PROGRAMFILES(X86)?
【发布时间】:2016-01-28 14:56:32
【问题描述】:

我尝试在 GNU makefile 中使用 Windows 7 的环境变量 PROGRAMFILES(X86),但没有成功。

这是一个最小的例子:

$(info DIR: $(PROGRAMFILES(X86)))
nop:
    @echo x 

如果我执行这个makefile,我只会得到

DIR: )
x

在我预料之中:

DIR: C:\Program Files (x86)
x

知道如何在 GNU makefile 中使用环境变量 PROGRAMFILES(X86) 吗?

我在 Cygwin 上使用 GNU make 4.1 版(在本机 Windows 上使用 3.81 版)。 我知道还有环境变量“PROGRAMFILES”,但我真的需要“PROGRAMFILES(X86)”

【问题讨论】:

  • 如果您运行make -qp,您是否在make 知道的变量列表中看到该变量?
  • 在 Unix 系统上,环境变量名称通常不包含括号等标点符号。您使用这样的名称作为环境变量正在如履薄冰 - 我假设您实际上正在设法创建这样一个变量,尽管我对此有些怀疑:export 'A(C)'=aleph-null 从 Bash 3.2 生成 -bash: export: 'A(C)=aleph-null': not a valid identifier Mac OS X 10.11.3(但export 'AC'=aleph-null 当然可以正常工作,所以不是单引号引起了问题)。
  • @Etan:在“make -qp”的输出中,它被命名为“ProgramFiles(x86)”,这很奇怪,因为通常 Cygwin 的 make 会将所有环境变量转换为大写。无论如何,无论我使用哪种外壳,我都无法访问环境变量。
  • @JonathanLeffler 这是 Windows。所有的常识和理智早已不复存在。 =)
  • 您可以尝试使用lp := (,然后使用$(info DIR: $(PROGRAMFILES$(lp)X86)),看看是否有效。我没有 cygwin 环境来测试它。如果这不起作用,您也可以尝试使用rp := ),看看是否有帮助。

标签: makefile environment-variables gnu-make


【解决方案1】:

Etan 想出了一个非常好的主意。 我做了一点修改,因此,以下实际工作:

b1 := (
b2 := )
$(info DIR: $(ProgramFiles$(b1)x86$(b2)) )
nop:
    @echo x 

但是我想出了一个更简单的方法:花括号似乎也可以解决问题:

$(info DIR: ${ProgramFiles(x86)} )
nop:
    @echo x     

对于这两种解决方案,写ProgramFiles(x86) 而不是大写PROGRAMFILES(X86) 也很重要。

【讨论】:

  • 好吧,我不会称其为 nice,更不用说 pretty,但如果这是一个可行的解决方法,那么值得一票?
猜你喜欢
  • 2012-11-07
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 2012-06-24
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多