标签:
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)
标签:
原文地址:http://blog.csdn.net/hhh3h/article/details/43492771