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

3
我尝试在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 已知的变量列表中看到该变量吗? - Etan Reisner
在Unix系统中,环境变量名称通常不包括括号等标点符号。如果您使用这样的名称作为环境变量,那么您就是在走钢丝 —— 我假设您实际上成功创建了这样一个变量,尽管我对此有些怀疑:在Mac OS X 10.11.3上,从Bash 3.2生成-bash: export: 'A(C)=aleph-null': not a valid identifier(但是,当然,export 'AC'=aleph-null可以正常工作,所以不是单引号引起的问题)。 - Jonathan Leffler
1
@JonathanLeffler 这是Windows。所有常识和理智早已消失了。=) - Etan Reisner
1
你可以尝试使用 lp := (,然后使用 $(info DIR: $(PROGRAMFILES$(lp)X86)) 来查看是否有效。我没有 cygwin 环境来测试它。如果这不起作用,你也可以尝试使用 rp := ),看看是否有帮助。 - Etan Reisner
非常好的想法。在宏中放置左右括号是有效的。非常感谢您的帮助。 - Holger
显示剩余2条评论
1个回答

4

Etan提出了一个非常好的想法。 我做了一些小修改,因此以下内容实际上可以工作:

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

然而,我找到了一种更简单的方法:花括号似乎也可以起到作用:
$(info DIR: ${ProgramFiles(x86)} )
nop:
    @echo x     

对于这两种解决方案,同样重要的是要写成ProgramFiles(x86)而不是大写的PROGRAMFILES(X86)

好吧,我不会说这个“好看”,更不用说“漂亮”了,但如果它是一个可行的解决方法,那么值得点赞。 - 0xC0000022L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接