什么是MinGW,自行百度或谷歌。
安装了MinGW后,需要将安装目录下的bin文件夹添加到系统的环境变量path中。下面给出bin目录下的可执行程序。
$ ls -al
...
... ... ... gcc.exe // C 编译器
... ... ... g++.exe // C++ 编译器
... ... ... mingw32-make.exe // makefile文件执行
可以看到将bin路径放到path变量中后,我们可以在任意时候使用该目录下的命令。
现在假定在 E:/CC 文件夹下创建 hello.cpp 和 Makefile 文件,使用Makefile是在Windows下用MinGW的最重要的理由,至少对于我来说。
// Makefile
objs = hello.o
cc = g++
edit: $(objs)
$(cc) -o edit $(objs)
hello.o: hello.cpp
$(cc) -c hello.cpp
clean:
rm $(objs) target.exe
这样我们可以使用 mingw32-make 命令来执行我们的Makefile文件。这里可以看到 mingw32-make.exe 文件名太长,并且不好记,我们可以将其重命名为 make.exe 这样就与Linux下的make命令保持一致了。
E:\CC> make
g++ -c hello.cpp
hello.cpp:9:2: warning: no newline at end of file
g++ -o edit hello.o
Makefile编译成功,并且在CC目录下生成了 hello.o 和 edit.exe 文件,执行 edit.exe 可以输出 Hello World,到这里是成功的。但是当我们执行 make clean 时就不行了。
E:\CC>make clean
rm hello.o edit.exe
process_begin: CreateProcess(NULL, rm hello.o edit.exe, ...) failed.
make (e=2): 系统找不到指定的文件。
make: *** [clean] Error 2
可以看到,系统找不到我们需要删除的文件。但是如果将clean下的操作改为
clean:
echo %CD%
输出还是 E:\CC,但是执行rm操作的时候没有发现需要删除的文件,个人怀疑是不是执行操作的时候系统的工作目录不是E:\CC。这个问题在Linux Shell下就不会出现。
因为我在Win7下安装了msysgit,当我们在 msysgit 的 bash 环境中执行 make clean操作的时候,删除操作是成功的。why?