c - Mingw 和 make 变量

标签 c makefile mingw gnu

我正在尝试在 mingw/msys 下在 Windows 上编译一个开源项目。

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 block 没有像我期望的那样运行。

最佳答案

CC 是几个 implicit variables 之一在 make session 中自动定义,因此行 ifndef CC 应该永远评估为真。

这解释了为什么您在 echo $CC 的命令行上看不到任何内容。 MSYS环境没有CC的概念。

如果你想在 make session 中查看变量的值,你总是可以使用 info功能:

$(info $(CC))

这将在评估 makefile 中的该行时将 CC 变量的值回显到控制台。

关于c - Mingw 和 make 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4029274/

相关文章:

c++ - MPI 发送和接收结构的结构

c - 在不知道文件大小且数据类型顺序不一致的情况下如何从文件中读取数据

c++ - 使用C++ Makefile.win检测Windows的i386 vs x64?

c++ - 使用 mingw 在 Linux 上交叉编译 Direct3D

c++ - VisualStudio 和 gcc 之间 *.dll *.a *.lib *.def 的兼容性

c - 为 Windows 库添加 unicode 支持

linux - 这个构建系统可以加速吗?

c++ - makefile 不构建程序的更新部分 - C++

c++ - 未通过路径变量识别 MinGW

c - 如何动态加载我自己的库,并调用其中的方法?