cmake是个跨平台编译工具,类似于autoconf。通过编译本地环境的makefile或者workplace来编译程序。
它的优点是简单高效。
CMakeList.txt文件是由注释、命令和空白字符组成。
注释是由 # 开始,到行结尾。
命令是由:命令名(空格分隔的参数)组成。
例如:command (args….)
args是以空格分隔的参数例表(如果参数中包含空格,则要加双引号)
除了用于分隔参数的空白字符(空格、换行号、tabs)都是被忽略不计的。任何包含在双引号中的字符都做为一个参数。一个反斜杠用于转换码。
命令名是大小写不敏感的。
详细的语法参考:
英文原文地址:http://www.cmake.org/cmake/help/syntax.html
翻译的地址:http://blog.csdn.net/kl222/article/details/7519340
cmake_minimum_required(VERSION 3.0) #定义需要的最小版本 project(testhello) #定义工程名字 set(PROJECT_ROOT_PATH "${CMAKE_SOURCE_DIR}/../") #设置变量, PROJECT_ROOT_PATH:工程目录得变量 SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin/") #设置可执行程序的输出目录 SET(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib/") #设置库的输出目录 INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/../include/") #设置头文件目录 LINK_DIRECTORIES("${CMAKE_SOURCE_DIR}/lib/") #设置库的连接目录 ADD_SUBDIRECTORY(src) #增加cmake的子目录 ADD_LIBRARY(hello STATIC "${SOURCE_1}") #库的生成, STATIC是静态库, SHARED是动态库 FILE(GLOB SOURCE_1 "${PROJECT_ROOT_PATH}/main/*.cpp") #设置文件变量,可支持简单正则 ADD_EXECUTABLE(main "${SOURCE_1}") #可执行程序生成 TARGET_LINK_LIBRARIES(main hello) #程序的库依赖
#include<iostream> #include<stdio.h> using namespace std; void SayHello();2)hello.cpp
#include "hello.h" void SayHello() { cout << "say hello !" << endl; }3)main.cpp
#include "hello.h" int main() { SayHello(); return 0; }文件目录:
[root@dadfaf]# tree . |-- cmake | |-- bin | | `-- main | |-- CMakeLists.txt | |-- lib | | `-- libhello.a | `-- src | |-- CMakeLists.txt | |-- hello | | `-- CMakeLists.txt | `-- main | |-- bin | `-- CMakeLists.txt |-- hello | `-- hello.cpp |-- include | `-- hello.h |-- main | `-- main.cpp `-- src |-- hello `-- main先看cmake目录下的CMakeLists.txt:
cmake_minimum_required(VERSION 3.0) project(testhello) set(PROJECT_ROOT_PATH "${CMAKE_SOURCE_DIR}/../") SET(EXECUTABLE_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/bin/") SET(LIBRARY_OUTPUT_PATH "${CMAKE_SOURCE_DIR}/lib/") INCLUDE_DIRECTORIES("${CMAKE_SOURCE_DIR}/../include/") LINK_DIRECTORIES("${CMAKE_SOURCE_DIR}/lib/")<pre name="code" class="plain">cmake_minimum_required(VERSION 2.6) #FILE(GLOB SOURCE_1 "${PROJECT_ROOT_PATH}/hello/hello.cpp") set(SOURCE_1 "${PROJECT_ROOT_PATH}/hello/hello.cpp") ADD_LIBRARY(hello STATIC "${SOURCE_1}")
cmake_minimum_required(VERSION 2.6) ADD_SUBDIRECTORY(hello) ADD_SUBDIRECTORY(main)再看看cmake/src/hello目录下的CMakeLists.txt:
cmake_minimum_required(VERSION 2.6) #FILE(GLOB SOURCE_1 "${PROJECT_ROOT_PATH}/hello/hello.cpp") set(SOURCE_1 "${PROJECT_ROOT_PATH}/hello/hello.cpp") ADD_LIBRARY(hello STATIC "${SOURCE_1}")最后看看cmake/src/main目录下的CMakeLists.txt:
cmake_minimum_required(VERSION 2.6) FILE(GLOB SOURCE_1 "${PROJECT_ROOT_PATH}/main/*.cpp") ADD_EXECUTABLE(main "${SOURCE_1}") TARGET_LINK_LIBRARIES(main hello)