
CMake是一个比make更高级的
编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。 通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者ctest)、生成当前平台的安装包(make package)、生成源码包(make package_source)、产生Dashboard显示数据并上传等高级功能,只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能,包括写测试用例。 如果有嵌套目录,子目录下可以有自己的CMakeLists.txt。 总之,CMake是一个非常强大的编译自动配置工具,支持各种平台,KDE也是用它编译的,感兴趣的可以试用一下。 准备活动: (1)安装cmake。 下载地址:中国至美.cmake.org/cmake/resources/software.html 根据自己的需要下载相应的包即可,Windows下可以下载zip压缩的绿色版本,还可以下载源代码。 Windows下CMake的使用 (2)运行cmake的方法。(GUI、命令行) 中国至美.cmake.org/cmake/help/runningcmake.html CMake使用步骤: 运行GUI的cmake界面: cmake-2.8.1-win32-x86\bin\cmake-gui.exe Windows下CMake的使用 执行Configure: 运行之后,生成了如下文件: Windows下CMake的使用 生成Makefile: 执行Generate之后生成如下文件: Windows下CMake的使用 运行make进行编译: Windows下CMake的使用 编译完成后,在build目录生成Tutorial.exe,运行Tutorial.exe 25就可以看到运行结果: Windows下CMake的使用 运行make install安装程序: Windows下CMake的使用 运行make test进行测试: Windows下CMake的使用 通过cmake tutorial学习CMake配置方法 中国至美.cmake.org/cmake/help/cmake_tutorial.html 可以在源代码的Tests/Turorial目录中找到这个手册对应的代码。 Windows下CMake的使用 1、Step1。 (如果不知道如何使用cmake,以及如何使用编译产生的Turorial.exe,可先看下前面“CMake使用步骤”的说明,它以Step4为例详细介绍了使用过程,Step1的配置可能不够完全,比如无法运行make install,无法运行make test,但可以参考。) 简单的程序编译。 (1)运行GUI的cmake,指定要编译的源代码路径和二进制文件路径(会自动创建)。 Windows下CMake的使用 (2)点击Configure,配置成功后,再点击Generate。 配置需要选择合适的编译器,虽然我安装了VC2008,但没有配置成功;选择Unix Makefiles,配置成功,它自动找到了DevC++下的gcc.exe等编译器。 Windows下CMake的使用 (3)在build3目录执行make,就能够编译生成Turorial.exe了。 D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>make Linking CXX executable Tutorial.exe [100%] Built target Tutorial 可以运行一下Turorial.exe: D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe Tutorial.exe Version 1.0 Usage: Tutorial.exe number D:\Projects\Lab\testngpp\cmake-2.8.1\Tests\Tutorial\Step1\build3>Tutorial.exe 4 The square root of 4 is 2 2、Step2 把子目录编译为库,并且链接到最终的可执行文件。 include_directories ("${PROJECT_SOURCE_DIR}/MathFunctions") add_subdirectory (MathFunctions) # 使得子目录MathFunctions也能被编译 # add the executable add_executable (Tutorial tutorial.cxx) target_link_libraries (Tutorial MathFunctions) 产生makefile: 在GUI上点击Configure,之后Generate还是灰色,再次点击Configure,Generate就可以点击了。 编译例子
在 cmake 脚本中,设置编译选项可以通过 add_compile_options 命令,也可以通过 set 命令修改 CMAKE_CXX_FLAGS 或 CMAKE_C_FLAGS 。
使用这两种方式在有的情况下效果是一样的,但请注意它们还是有区别的:
例子
也可以直接在编译的时候指定:
语法
待补充
语法
在CMake中基础的数据形式是字符串。CMake也支持字符串列表。
列表通过分号分隔。譬如两个声明给变量VAR设同样的值:
字符串列表可以通过foreach命令迭代或直接 *** 控列表命令。
CMake 支持简单的变量可以是字符串也可以是字符串列表。变量参考使用 ${VAR} 语法。多参数可以使用 set 命令组合到一个列表中。所有其他的命令
通过空白分隔符传递命令来扩展列表,例如
像大多数语言一样,Cmake 提供了控制流结构。Cmake提供了三中控制流:
更多控制流信息参见命令 if,while,foreach,macro,function文档。
在CMake中原义字符串用双引号括起来。字符串可以是多行字符串,并在其中嵌入新的行。例如
也可以在一个字符串中转义字符和使用变量
同样支持标准C中的转义
如果字符在引号之前是空格则原义字符串只是原义字符串。但是引号必须成对,例如
cmake可以使用正则表达式
cmake project 头文件必须存在这行命令, 例如 cmake_minimum_required(VERSION 3.10)
设置项目名称 project(Tutorial)
语法
例子
语法
将指定的源文件(CPP文件)生成链接文件,然后添加到工程中去。
语法
其中 <name>表示库文件的名字,该库文件会根据命令里列出的源文件来创建。而 STATIC 、 SHARED 和 MODULE 的作用是指定生成的库文件的类型。
例子
在子文件夹添加了 library 或者 executable 之后,在上层目录添加 subdirectory , 也可以在同一个CMakeList.txt中使用
它相当于 g++ 选项中的 -I 参数的作用,也相当于环境变量中增加路径到CPLUS_INCLUDE_PATH变量的作用。
语法:
它相当于 g++ 命令的 -L 选项的作用,也相当于环境变量中增加 LD_LIBRARY_PATH 的路径的作用。
语法:
语法:
该指令的作用主要是指定要链接的库文件的路径,该指令有时候不一定需要。因为find_package和find_library指令可以得到库文件的绝对路径。不过你自己写的动态库文件放在自己新建的目录下时,可以用该指令指定该目录的路径以便工程能够找到。
语法:
link_libraries(library1 <debug | optimized>library2 ...)
可以链接一个,也可以多个,中间使用空格分隔.
语法:
语法:
简单的例子如下:
一般情况下, make install 在不指定 prefix 默认安装在`/usr/local/bin
评论列表(0条)