在Makefile中判断操作系统生成.exe时出错,如何修复?
问题解决:Windows下Makefile条件判断报错
你的错误根源是把Make的条件指令ifeq当成了shell命令缩进在目标的命令块里。ifeq是GNU Make自身的语法,必须顶格书写,不能跟在tab键后面(缩进的行是要交给shell执行的外部命令,系统里不存在ifeq这个程序,所以会报错)。
正确写法一:Make层面的条件判断(推荐)
提前根据系统变量确定目标文件名,再编写编译规则:
# 顶格写Make的条件判断,确定目标文件 ifeq ($(OS),Windows_NT) TARGET = hello.exe else TARGET = hello endif # 默认目标 all: $(TARGET) # 编译规则,$@代表当前目标 $(TARGET): hello.cpp g++ hello.cpp -o $@
正确写法二:Shell层面的条件判断
如果你的Windows环境用的是bash类shell(比如Git Bash、MSYS2),可以把判断逻辑交给shell执行,注意命令行的续行和格式:
all: @if [ "$(OS)" = "Windows_NT" ]; then \ g++ hello.cpp -o hello.exe; \ else \ g++ hello.cpp -o hello; \ fi
- 每行命令结尾的
\是shell的续行符,必须保留 @可以让make不输出命令本身,只显示执行结果
内容的提问来源于stack exchange,提问作者maghje13
相关产品推荐
相关产品推荐

