CMake

CMake

参考链接:http://www.hahack.com/codes/cmake/

一、CMake简介

​ CMake是一种跨平台编译工具,CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执行程序或共享库(so(shared object))

二、编译步骤

编译过程:

cmake/ccmake PATH    # PATH为CMakeLists.txt 所在的目录,.代表当前目录,..代表上一级目录
                     #ccmake与cmake的区别就是ccmake供了一个交互式的界面。
make
make install         #将 make 生成的文件安装到系统的对应目录中

参数:

cmake -D  **=**  PATH
make -j4   #指同时运行命令的个数。如果-j后没有参数,make运行命令时能运行多少就运行多少。如果                      #有一个以上的“-j”参数,那么仅最后一个“-j”才是有效的

三、CMake指令

cmake_minimum_required (VERSION *)   # CMake 最低版本号要求
project (*)   #指定项目的名称,一般和项目的文件夹名称对应
INCLUDE_DIRECTORIES(*)  #头文件目录
aux_source_directory(* *) #查找目录下的所有源文件,并将名称保存到 * 变量
add_executable(* ${*})  #指定生成目标
target_link_libraries(*  ${*}) #加载链接库
configure_file(* *)#加入一个配置头文件,用于处理 CMake 对源码的设置
option(* "*" ON/OFF) #添加选项
add_subdirectory(*)#添加子目录
add_library(* ${}) #生成链接库

四、实例

文件目录结构:

.
├── build
├── CMakeLists.txt
├── include
│   └── b.h
└── src
    ├── b.c
    └── main.c

Demo1:

main.cpp:

#include "my.h"

int main()
{
    double base = 5;
    int exponent = 4;
    double result = power(base, exponent);
    printf("%g ^ %d is %g\n", base, exponent, result);
    return 0;
}

my.h:

#include <stdio.h>
#include <stdlib.h>
double power(double base, int exponent);

my.cpp:

double power(double base, int exponent)
{
    int result = base;
    int i;

    if (exponent == 0) {
        return 1;
    }
    
    for(i = 1; i < exponent; ++i){
        result = result * base;
    }

    return result;
}

CMakeLists.txt :

cmake_minimum_required (VERSION 2.8)
project(Demo1) #项目的名称
add_subdirectory(math) #添加子目录
INCLUDE_DIRECTORIES(include) #添加头文件目录
aux_source_directory(src aa) #把src目录下的源文件保存在aa中
add_executable(Demo ${aa}) #编译aa,生成Demo可执行文件
target_link_libraries(Demo my) #为Demo添加链接库

链接库(CMakeLists.txt) :

cmake_minimum_required (VERSION 2.8)
aux_source_directory(. aa)#把当前目录下的源文件保存在aa中
add_library(my ${aa}) #生成链接库

Demo2:

main.cpp:

#include "my.h"

int main()
{
    double base = 5;
    int exponent = 4;
    double result = power(base, exponent);
    printf("%g ^ %d is %g\n", base, exponent, result);
    return 0;
}

my.h:

#include <stdio.h>
#include <stdlib.h>
double power(double base, int exponent);

my.cpp:

double power(double base, int exponent)
{
    int result = base;
    int i;

    if (exponent == 0) {
        return 1;
    }
    
    for(i = 1; i < exponent; ++i){
        result = result * base;
    }

    return result;
}

my.cpp:

double power(double base, int exponent)
{
    
    return base + exponent;
}

config.h.in:

#cmakedefine USE_MYMATH #定义变量USE_MYMATH

CMakeLists.txt :

cmake_minimum_required (VERSION 2.8)
project (Demo2)
configure_file (config.h.in build/config.h) #加入一个配置头文件,用于处理 CMake 对源码的设置
option (USE_MYMATH "Use provided math implementation" ON) #定义选项,默认为ON
INCLUDE_DIRECTORIES( include ) 
if (USE_MYMATH) #使用函数1
  add_subdirectory (math_1)  #添加子目录
else() #使用函数2
  add_subdirectory (math_2)  #添加子目录
endif (USE_MYMATH)


AUX_SOURCE_DIRECTORY(src DIR_SRCS)
ADD_EXECUTABLE(Demo ${DIR_SRCS})
target_link_libraries (Demo my)

五、应用

安装gflags:

unzip gflags-master.zip
cd gflags-master
mkdir build 
cd build
cmake -D CMAKE_INSTALL_PREFIX=/home/jzn/local_install ..
make -j
make install
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值