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 变量的主要内容,如果未能解决你的问题,请参考以下文章

Cmake与MinGW配合使用

新人求教,急.qt4.8.6无法编译

找不到 boost 库

Qt 编程无法编译,高手来!

eclipse cdt Program "make" not found in PATH

cmake 多目录管理