自动构建工具CMake简介 |
发布: 2007-09-05 09:46 |
简介CMake读取脚本文件并且为它所运行的平台的本地构建系统产生输入文件。它可以生成GNU Makefiles、KDevelop的项目文件、XCode项目文件以及Visual Studio项目文件等多种文件格式。 CMake是自由软件并且是在BSD协议下发布的。它是由Kitware公司开发的。 这些地方学习CMake挺不错的: 另外,还可以考虑加入CMake邮件列表。 为什么使用CMake?CMake和以前的构建工具automake和unsermake的主要技术不同点有:
获取和安装CMake从[cmake 下面页面]获得取回最新的CMake稳定版。 下载完后,解压并安装: $ mkdir cmake-build 默认的,这将把CMake安装在/usr/local,因此,确定/usr/local/bin在的执行路径里。要改变安装路径,(例如debian中改为/usr),在bootstrap命令中加入'--prefix=PATH'选项。 如果你想使用当前的开发版本,请遵循这里的指令。 运行CMake你必须运行CMake来为你的系统生成build文件。CMake支持in-source和out-of-source构建 cd /path/to/cmakesupported/project cmake . 这将在 当前目录下生成此项目的Makefile文件,当然如果项目包含子目录,cmake 也会自动处理。 在Linux平台也可以生成 KDevelop 项目: cmake . -GKDevelop3 您可以使用“cmake -h”来查看CMake支持那些生成器 (generators)及其他的选项。 CMake和Qt4为了定位Qt 4,CMake会在你的执行路径中搜索qmake。CMake不会使用QTDIR这个环境变量。因此请确保在执行路径中寻找到的第一个qmake就是你希望使用的。 更多细节当CMake执行完成,它会生成一个叫“CMakeCache.txt”的文件。这个文件包含了CMake在你的系统上检测到的所有设置。如果你希望在其他生成器(generators)上运行CMake,或你希望CMake重新检测系统,请删除这个文件。 如果有些东西你知道它存在,而CMake没有检测到,你可以手动的告诉CMake到哪里去找它。CMake通过变量来存储这些信息。这些变量缓存在前面提到的 CMakeCache.txt中。这里有3个选项来手工调整这些变量:
你应该最起码运行一次“ccmake .这样你会对CMake使用了那些变量有个印象。按“T”来查看“高级”的变量。如果有些东西CMake没有找到,运行ccmake并手工调整它。 一些你可能希望设置的变量:
环境变量如果你在CMake没法找到的非标准位置安装了头文件或库( 例如Mac OSX下把fink安装到/sw),那么就请设置下面这些环境变量。尽管有相似的命名规则,这些设置在cmake的命令中并不会做为参数来工作。
关于变量的更多信息,请参考 cmake.org wiki page。 更进一步如果cmake以“Generating done”结束,那表示没有错误,但如果以“Configuring done”结束,那表示有错误需要修正。当cmake成功结束,运行你的构建工具(如make、KDevelop、XCode或MSVC)来构建并等到它 结束。然后运行“make install”。 如果你得到如下错误提示: CMake Error: This project requires some variables to be set, 那表示你可能缺少库(或其他依赖包)。在cmake/modules目录中查找cmake无法找到的变量来确定是缺少哪个库文件。在上面的例子中,就是: FIND_LIBRARY(X11_XTest_LIB Xtst ${X11_LIB_SEARCH_PATH}) 这里缺失的库是Xtst。然后你找到这个库(也许是通过安装libXtst-devel)并再次运行cmake。 在简单的应用中使用CMake这是最简单的CMakeLists.txt: add_executable(hello main.cpp) 这将从main.cpp源码文件创建一个叫“hello”(Windows下叫“hello.exe”)的可执行文件。你可以根据自己的需要将C和 C++文件混合。在同一个CMakeLists.txt可以有多个可执行文件和库。同一个源码文件可以用于不同的目的,源码可以从其他目标中为每个目的独 立的编译。CMake语言最重要的部分可能是变量: SET( MY_SOURCES main.cpp widget.cpp) 使用SET()命令来为变量设置值。如果你列出了一个以上的字符串,变量将是串列表。列表是一列由分号隔开的字符串。如果只设置个一项,那么这项只有一个值。可以通过${VAR}获得变量的值。可以使用FOREACH()来迭代一份列表: FOREACH(next_ITEM ${MY_SOURCES}) CMake中的命令是大小写无关的。变量名和参数名是大小写相关的。 还可以测试一些不同的东西: IF (UNIX) 在第二个例子中,你可以看到如何将项目附加到列表中。 在cmake Wiki中有一份使用cmake构建KDE4软件的指导,推荐阅读。 扩展CMakeCMake可以通过cmake脚本扩展,CMake带有大量的脚本,在UNIX下,这些脚本默认安装在 /usr/local/share/CMake/Modules/内。KDE库也在/apps/cmake/modules/安装了一些CMake模块。 这里的文件将被代替CMake的系统全局模块路径。FindFOO.cmake用来检测软件包, 这里有更多信息。在CMake中也可以写宏文件,对于大多数的软件构建来说,他们足够强大了。这些宏不会做为通用语言来使用。 你还可以在CMake中编写宏。他们非常强大,可以满足你编译的软件中所需要的所有事情,但是他们并不是被用作通用目的的编程语言。
我如何让CMake创建noisy makefiles?我希望准确的看到make过程执行的命令。给make传递 VERBOSE 变量,例如: % make VERBOSE=1 或者 % VERBOSE=1 make 更多细节请查看CMake wiki: 有没有选项可以产生更多的“verbose”编译?
产生的Makefiles中没有“make distclean”标签。我如何才能清理包括cache文件在内的所有文件?只需删除构建目录,或目录里包含的内容。
|
原文: http://qtchina.tk/?q=node/75 |
Powered by zexport
|