windows - Windows 10 Makefile 设置变量问题
问题描述
我试图让下面的 make 文件在 Windows 和 Unix 中都可以工作。我遇到了麻烦,标准<VAR> := <Value>
似乎在 Windows 中无法正常工作(我make
通过 Cholocalety 方式安装choco install make
)。我可以ifeq ($(OS),Windows_NT)
每次都检查,但宁愿传递一个内部变量。任何帮助将不胜感激,因为我不知道如何实际谷歌这个......
代码输出为:
Windows_NT
detected_OS: Windows
------------
Not-Windows
下面的代码:
#.RECIPEPREFIX:=> # This doesn't work either...
.PHONY: test
test:
ifeq ($(OS),Windows_NT) # is Windows_NT on XP, 2000, 7, Vista, 10...
$(eval DET_OS=Windows)
# DET_OS : =Windows
# DET_OS=Windows
else
$(eval detected_OS = nonWindows)
endif
@echo $(OS)
@echo detected_OS: $(DET_OS)
@echo ------------
# ifeq ($(DET_OS), Windows)
ifeq "$(DET_OS)" "Windows"
@echo Windows
else
@echo Not-Windows
编辑:有人指出帖子的一部分丢失了,所以为了清楚起见,我在这里添加它。ifeq ($(DET_OS), Windows)
代码应该在代码的后面部分执行路径。输出显示它正在沿着non-windows
路径前进。我不确定我需要做什么才能让它沿着Windows
用户定义变量的路径前进
解决方案
主要问题是您无法make
在配方中设置变量。在配方中设置时,它被视为要运行的命令,而不是变量设置。除此之外,它对我来说效果很好:
> Get-Content Makefile
.PHONY: test
ifeq ($(OS),Windows_NT)
DET_OS := Windows
else
DET_OS := nonWindows
endif
test:
@echo $(OS)
@echo detected_OS: $(DET_OS)
@echo ------------
ifeq ($(DET_OS),Windows)
@echo Windows
else
@echo Not-Windows
endif
输出:
> ..\make-4.3\WinRel\gnumake.exe
Windows_NT
detected_OS: Windows
------------
Windows
> ..\make-4.3\WinRel\gnumake.exe --version
GNU Make 4.3
Built for Windows32
推荐阅读
- java - 在 Spring Data Rest 中测试 ManyToMany / OneToMany 关联
- sql - 简单的子查询语句,收到错误
- c# - 将 ASP.NET DI 用于带有 TinyIoC 的 SignalR
- java - 如何修复除以零异常?
- telegram-bot - ModuleNotFoundError:没有名为“电报”的模块
- jekyll - Item.Image 未在 Jekyll 中显示
- node.js - app.auth(...).signInWithCredential 不是函数 firebase 错误
- c++ - 使用在每种类型的可变参数模板上模板化的类初始化元组
- python-3.x - 想要在特定列中添加与其他列相比的字段值
- objective-c - 使用 NSURLSessionDataTask 进行线程处理