ubuntu下安装cmake及cmake简单使⽤,CmakeList的编写和参
数详解
安装过程
1. ⾸先去官⽹下载,选择“”源码安装包
2. 输⼊如下命令
$tar -zxvf
$./bootstrap
$make
$make install
输⼊以上命令后就已经可以在ubuntu上安装好cmake
编写简单的cmake
使⽤cmake⾸先得有个⽂件,你需要把配置信息写在该⽂件中,然后通过cmake去处理该⽂件。
将设有下⾯⼀个main.cpp⽂件
//main.cpp⽂件
#include<iostream>
using namespace std;
int main(){
cout<<"hello world!"<<endl;
return 0;
}
这时候我们就可以写个如下的⽂件
#cmake最⼩需要版本
cmake_minimum_required(VERSION 2.8)
#项⽬名字
project(HELLOWORLD)
#包含原程序,即把给定⽬录下的源程序复制给变量DIR_SRC
aux_source_directory(DIR_SRC ./)
#⽣成程序
add_executable(helloworld ${DIR_SRC})
然后执⾏如下命令
$mkdir build
$cd build
$cmake ..
$make
$./helloworld
这样就编译好程序并运⾏。
添加静态库或者动态库
⽽假设我们程序⽤到了在/usr/lib下的⼀个静态库libmy.a,那就需要添加如下两个命令
#库所在位置
link_directories(/usr/lib)
#程序编译时候链接库
target_link_libraries(helloworld my)
******************************************⼆CmakeList的编写和参数详解************************
使⽤cmake 很简单,只需要执⾏cmake, make 两个命令即可,⽤我⼯作中的⼀个⼯程举例说明。
为什么现在都用cmake假设当前的项⽬代码在src ⽬录。 src 下有⼦⽬录:server, utility, lib, bin, build
server -----  存放项⽬的主功能类⽂件
utility  -----  存放项⽬要⽤到相关库⽂件,便已成为库⽂件存放到⼦⽬录lib 中
lib      -----  存放utility ⽣成的库
bin      -----  存放association ⽣成的⼆进制⽂件
build  -----  编译⽬录,存放编译⽣成的中间⽂件
cmake 要求⼯程主⽬录和所有存放源代码⼦⽬录下都要编写 ⽂件,注意⼤⼩写(cm ⼤写,list中l ⼤写且落下s).      ⽂件如下:
1. #cmake file for project association #表⽰注释
2. #author:>---double__song
3. #created:>--2011/03/01
4.
5. CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #cmake 最低版本要求,低于2.6 构建过程会被终⽌。
6.
7. PROJECT(server_project) #定义⼯程名称
8.
9. MESSAGE(STATUS "Project: SERVER") #打印相关消息消息
0. MESSAGE(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}")
1. SET(CMAKE_BUILE_TYPE DEBUG) #指定编译类型
2. SET(CMAKE_C_FLAGS_DEBUG "-g -Wall") #指定编译器
13.
4. ADD_SUBDIRECTORY(utility) #添加⼦⽬录
5. ADD_SUBDIRECTORY(server)
相关解释:
1. ⽂件中不区分⼤⼩写
2. PROJECT(project_name)    定义⼯程名称
语法:project(projectname [cxx] [c] [java])
可以指定⼯程采⽤的语⾔,选项分别表⽰:C++, C, java, 如不指定默认⽀持所有语⾔
3. MESSAGE(STATUS, "Content")  打印相关消息
输出消息,供调试 ⽂件使⽤。
4. SET(CMAKE_BUILE_TYPE DEBUG)  设置编译类型debug 或者release。 debug 版会⽣成相关调试信息,可以使⽤GDB 进⾏          调试;release不会⽣成调试信息。当⽆法进⾏调试时查看此处是否设置为debug.
5. SET(CMAKE_C_FLAGS_DEBUG "-g -Wall") 设置编译器的类型
CMAKE_C_FLAGS_DEBUG            ----  C 编译器
CMAKE_CXX_FLAGS_DEBUG        ----  C++ 编译器
6. ADD_SUBDIRECTORY(utility) 添加要编译的⼦⽬录
为⼯程主⽬录下的存放源代码的⼦⽬录使⽤该命令,各⼦⽬录出现的顺序随意。
如上便是⼯程server_project 主⽬录src 下的 ⽂件,下⼀篇我们解释⼦⽬录utiltiy中的 ⽂件。
⼦⽬录utility 下的 ⽂件如下:
1. #Cmake file for library utility.a
2. #Author: double__song
3. #Created: 2011/3/3
4.
5. SET(SOURCE_FILES #设置变量,表⽰所有的源⽂件
6. ConfigParser.cpp
7. StrUtility.cpp
8. )
9. INCLUDE_DIRECTORIES( #相关头⽂件的⽬录
0. /usr/local/include
1. ${PROJET_SOURCE_DIR}/utility
2. )
13.
4. LINK_DIRECTORIES( #相关库⽂件的⽬录
5. /usr/local/lib
6. )
17.
8. ADD_LIBRARY(association ${SOURCE_FILES}) #⽣成静态链接库libassociation.a
9. TARGET_LINK_LIBRARY(association core) #依赖的库⽂件
20.
1. SET_TARGET_PROPERTIES(utility PROPERTIES #表⽰⽣成的执⾏⽂件所在路径
2. RUNTIME_OUTPUT_DIRECTORY> "${PROJECT_SOURCE_DIR}/lib")
相关解释:
1. SET(SOURCE_FILES .....)
表⽰要编译的源⽂件,所有的源⽂件都要罗列到此处。set 设置变量,变量名SOURCE_FILES⾃定义。
2. INCLUDE_DIRECTORY(...)
include头⽂件时搜索的所有⽬录
变量PROJECT_SOURCE_DIR 表⽰⼯程所在的路径,系统默认的变量
3. LINK_DIRECTORIES(...)
库⽂件存放的⽬录,在程序连接库⽂件的时候要再这些⽬录下寻对应的库⽂件
4. ADD_LIBRARY(...)
表⽰⽣成静态链接库libassociaiton.a,由${PROJECT_SOURCE_DIR}代表的⽂件⽣成。
语法:ADD_LIBRARY(libname [SHARED|STATIC]
SHARED 表⽰⽣成动态库, STATIC表⽰⽣成静态库。
5. TARGET_LINK_LIBRARY(association core)
表⽰库association 依赖core库⽂件
6. SET_TARGET_PROPERTIES
设置编译的库⽂件存放的⽬录,还可⽤于其他属性的设置。如不指定,
⽣成的执⾏⽂件在当前编译⽬录下的各⼦⽬录下的build⽬录下,好拗⼝!简单⼀点:
如指定在: ./src/lib 下
不指定在: ./src/build/utility/build ⽬录下
⽣成的中间⽂件在./src/build/utilty/build ⽬录下,不受该命令额影响
⼦⽬录server 下的 ⽂件:
1. --------------------------------------------------------------------------------------------
2. SET(SOURCE_FILES
3. Gassociation.cpp
4. ConfigurationHandler.cpp
5. )
6. INCLUDE_DIRECTORIES(
7. /usr/local/include
8. ${PROJECT_SOURCE_DIR}/utility
9. ${PROJECT_SOURCE_DIR}/association
0. )
1. LINK_LIBRARIES(
2. /usr/local/lib
3. ${PROJECT_SOURCE_DIR}/lib
4. )
5. ADD_EXECUTABLE(server ${SOURCE_FILES})
6. TARGET_LINK_LIBRARIES(server
7. utility
8. )
9. SET_TARGET_PROPERTIES(server PROPERTIES #表⽰⽣成的执⾏⽂件所在路径0. RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin")
相关解释:
1. ADD_EXECUTABLE()    #指定要⽣成的执⾏⽂件的名称server
其他⽤法同
2. SET_TARGET_PROPERTIES
设置⽣成的执⾏⽂件存放的路径,

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。