: 怎么用cmake 生成 MinGW 的 makefile

求助: 如何用cmake 生成 MinGW 的 makefile
最近在学习c++,碰到这个问题 
不知道如何为项目生成 MinGW 的 makefile文件 

系统环境:windows 2003 server 
编译工具:MinGW, cmake 
同时我安装了vs.net 2005(工作需要) 

项目的cmakelists.txt脚本文件是正确的(sourceforge中的开源项目npp),我使用cmake命令时,总是生成.net 的解决方案文件,不知道作怎样的设置,请大侠赐教 

另外,请问cmake -G 应该如何使用? 
谢谢

------解决方案--------------------
转贴:

本来想翻译这篇文章的。很快觉得翻译起来太累。干脆改成自己的语言吧。
本文有些错误,我更熟悉cmake后会再来修改。

以一个简单的Hello World例子开始,它包括2个文件:
hello.c CMakelists.txt 

CMakelists.txt的内容:

PROJECT (Hello)ADD_EXECUTABLE(Hello Hello.c)

简单解释一下:
CMake 的配置文件格式是:COMMAND (args),COMMAND就是命令,如上面的PROJECT,ADD_EXECUTABLE;args是命令的参数,如果有多个参数,需要用空格分割;如果参数包含空格,则可以用 "" 括起来
PROJECT 命令是指该项目的名字;具体有啥大的用处,我暂时也还没有弄明白,可能其他地方会有关系吧:)
ADD_EXECUTABLE 命令是指要编译的文件,上面的意思 把源文件Hello.c 编译成Hello (Win下是"hello.exe"),

OK,在Unix命令行模式下运行:cmake -G
Win下,编译成MinGW模式:cmake -G "MinGW Makefiles"
再运行:make
第一次看到Make命令会有颜色输出,真好看。

如果有多个源文件才能编译成hello,则可以这样写:
ADD_EXECUTABLE(Hello Hello.c File2.c File3.c File4.c)

=======================华丽的分割线==========================

下面介绍一个稍微复杂点的应用:

PROJECT (HELLO)
SET(HELLO_SRCS Hello.c File2.c File3.c)
IF (WIN32)
SET(HELLO_SRCS ${HELLO_SRCS} WinSupport.c)
ELSE (WIN32)
SET(HELLO_SRCS ${HELLO_SRCS} UnixSupport.c)
ENDIF (WIN32)
ADD_EXECUTABLE (Hello ${HELLO_SRCS})

SET 命令s是列表定义,以后就可以用${HELLO_SRCS} 表示 "Hello.c File2.c File3.c"了
IF ELSE ENDIF 这些判断语句,就不需要详细介绍了;其他判断有:WHILE ENDWHILE / FOREACH ENDFOREACH

=======================华丽的分割线==========================
更多有用的指令:

编译目标指令

SET()
SUBDIRS()
ADD_LIBRARY()
ADD_EXECUTABLE()
AUX_SOURCE_DIRECTORY()
PROJECT()

SUBDIRS :CMake 是以递归的方式工作;处理完当前目录,再去 SUBDIRS 中的目录
ADD_LIBRARY :生成一个链接库
AUX_SOURCE_DIRECTORY :不在当前目录下的其他地方的源文件
PROJECT :用于 MSVS 的项目名字,同时定义了2个变量:ProjectName_SOURCE_DIR 和 ProjectName_BINARY_DIR

编译BUILD选型

INCLUDE_DIRECTORIES()
LINK_DIRECTORIES()
LINK_LIBRARIES()
TARGET_LINK_LIBRARIES()

这些都是用于添加链接库和引用库的。
上面这些命令有一个很重要的特征:它们能被子目录中的CMakeLists.txt继承。比如,
./CMakeLists.txt 文件有:
INCLUDE_DIRECTORIES(/usr/include)
SUBDIRS(./subdir1)

./subdir1/CMakeLists.txt 文件有:
INCLUDE_DIRECTORIES(/tmp/foobar)

则最后的结果是:
INCLUDE_DIRECTORIES(/usr/include /tmp/foobar)

=======================华丽的分割线==========================

CMake提供了很多通用的查找模块,比如查找OpenGL,Java,使用方法:
INCLUDE (${CMAKE_ROOT}/Modules/FindTCL.cmake)

把新的目录添加到项目中
1. 在项目的源代码目录下的某个地方创建一个新目录
2. 在上级目录的 CMakeLists.txt 文件中添 SUBDIRS 命令
3. 在新目录中创建 CMakeLists.txt,并添加必要的命令