Published

05 November 2014

Tags

Contents

捡起许久以前编写的代码, 是一个Qt project, 并且还有一大堆乱七八糟的依赖, 编译起来简直抓狂, 所以想趁机会学习一下CMake

之前在学 CMake 和 Scons 之间挣扎了一下, 最终还是觉得 CMake 靠谱一点, CMake 的优势 是可以直接将 CMakeList.txt 编译成其他 IDE 可以识别的工程, 比如 VS 的 sln, makefile, Eclipse, 甚至连 sublime 都有.

这里主要的参考资料是 http://sewm.pku.edu.cn/src/paradise/reference/CMake%20Practice.pdfhttp://zh.wikibooks.org/zh/CMake_%E5%85%A5%E9%96%80

设置 generator

在 windows 下默认使用的是生成 vs 的 solution, 如果要改为 makefile 文件有两种办法:

修改 cmake 运行参数

cmake -G "MinGW Makefiles" .

或者在Cmakelist.txt里面这么写

set(cmake_generator "MinGW Makefiles")

生成的 makefile 可以使用 make help 查看可用的 make 指令, 以及使用 make VERBOSE=1 查看详细的生成命令, 另外可以用 cmake --help-command xxx 来查看对应命令的帮助,

使用 set 可以设置变量, 变量有 5 种类型 FILEPATH PATH STRING BOOL INTERNAL, 并且可以设置 cache 属性, 多用来提供用户接口

使用外部编译

所谓使用外部编译, 就是把编译程序和源代码分离开来, 放置在不同的文件夹下, 好处很多, 比如利于版本控制, 利于打包程序, 利于清理程序

方法很简单, 切换到想要的目录下执行 cmake 即可

设置编译存放目录

这两句话分别设置了二进制文件的存放位置

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)

分别对应了ADD_EXECUTABLEADD_LIBRARY

一些有用的 cmake 变量 http://www.cmake.org/Wiki/CMake_Useful_Variables

设置安装目录

默认的 make 里面是没有 install 选项的, 需要在 cmakelist.txt 里通过添加 install 指令实现. 在这之前需要设置 CMAKE_INSTALL_PREFIX, install 指令的简单 使用

install(TARGETS hello RUNTIME DESTINATION bin)

以及 install 可以不是 TARGETS, 还可以是 files, PROGRAMS, DIRECTORY, 甚至支持正则表达式

使用库

主要是include_directories, link_directories, target_link_libraries, 要记住这几个指令最好放在 add_executable 之后, 因为实验过程中发现先后是会产生 不同的现象的, add_definitions 添加宏指令, 以及 target_link_libraries 可以 为 release 和 debug 分别指定库

以及 vs 如果需要设置为 64 位的话得用

cmake .. -G "Visual Studio 12 2013 Win64"


blog comments powered by Disqus