CMake 学习
Published
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.pdf 和 http://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_EXECUTABLE
和 ADD_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