Mingw 和 make 变量
Posted
技术标签:
【中文标题】Mingw 和 make 变量【英文标题】:Mingw and make variables 【发布时间】:2010-10-27 01:18:35 【问题描述】:我正在尝试在 windows 上的 mingw/msys 下编译一个开源项目。
makefile 包含(以及其他)这一行
@$MAKE --no-print-directory -C . -f physfs.make
physfs.make 包含(除其他外)这些行:
ifndef CC
CC = gcc
endif
当我运行 make 时出现以下错误:
Creating obj/Debug/physfs
physfs.c
make[1]: cc: Command not found
make[1]: *** [obj/Debug/physfs/physfs.o] Error 127
make: *** [physfs] Error 2
如果我注释 ifndef / endif 对而保留 CC = gcc 不变,则构建工作。如果不是 make 我发出这个命令:
make -e CC=gcc
构建也可以。但是当我在 msys 中运行以下命令时:
echo $CC
什么都不显示。
我认为关于环境变量在 MSYS 中的工作原理和使我不理解的一些基本内容。
能否请一些人帮助我解决此问题,以便我能理解为什么简单的“make”命令会报错以及为什么 ifndef 块没有按我预期的那样运行。
【问题讨论】:
【参考方案1】:CC
是在 make 会话中自动定义的几个 implicit variables 之一,因此行 ifndef CC
应该永远评估为 true。
这解释了为什么在echo $CC
的命令行上什么也看不到。 MSYS环境没有CC的概念。
如果您想在 make 会话中查看变量的值,您可以随时使用 info 函数:
$(info $(CC))
这将在评估 makefile 中的该行时将 CC 变量的值回显到控制台。
【讨论】:
备注:测试$(CC)
是否有默认值的正确方法是ifeq (default,$(origin CC))
。
@Jack Kelly:make 文件是由 premake 实用程序 industriousone.com/premake 生成的,所以我无法更改正在生成的内容。在 premake 网站上,有人坚持认为这是 mingw-make 中的一个错误,默认情况下 CC 等于 cc。 e.James 所链接的 gnu man 似乎另有说明。
@zespri:我发布的链接同意:CC默认设置为cc。
如果我正确理解了您的最后评论,那么这也是我的意思。有人说 (industriousone.com/post/…) mingw-make 将 CC 设置为错误的值,而您提供的链接表明默认情况下将 CC 设置为 cc 是它的本意。
@zespri:是的,我们在说同样的事情。我误解了你之前的评论;我以为您的意思是我的链接表明 CC 变量 not 默认情况下应该等于 cc。我现在意识到你的意思是相反的:)
以上是关于Mingw 和 make 变量的主要内容,如果未能解决你的问题,请参考以下文章