cmake

        使用简单方便,可以跨平台,构建项目编译环境。尤其比直接写Makefile简单(在构建大型工程编译 时,需要写大量的文件依赖关系),可以通过简单的CMake生成负责的Makefile文件。

cmake安装

        ubuntu上直接执行 sudo apt install cmake 安装完成,可以通过cmake --version查看其版本:

user@ubuntu:~$ cmake --version
cmake version 3.10.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

cmake使用

        一个大型项目中,通常代码组织如下:

user@ubuntu:~/CMakeTest$ tree
.
├── bin
├── build
├── CMakeLists.txt
├── include
│   └── sum.h
├── lib
├── src
│   ├── CMakeLists.txt
│   └── sum.cpp
└── test
    ├── CMakeLists.txt
    └── main.cpp

最外层的 CMakeLists.txt 是总控制编译,内容如下:

# 要求cmake最低的版本号
cmake_minimum_required (VERSION 2.8)
# 定义当前工程名字
project (demo)

# 添加子CMakeLists.txt路径
add_subdirectory(test)
add_subdirectory(src)

src里面的源代码要生成静态库或动态库,CMakeLists.txt内容如下:

# 设置库文件存放路径
SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)

# 添加头文件路径,相当于makefile里面的-I
include_directories(${PROJECT_SOURCE_DIR}/include)

# 生成库,动态库是SHARED,静态库是STATIC
ADD_LIBRARY(sum SHARED sum.cpp)

# 修改库的名字
#set_target_properties (sum PROPERITES OUTPUT_NAME "libsum")

test源码会加载并使用libsum.so,里面的CMakeLists.txt内容如下:

# 设置程序可加断点
set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} -g)
# 设置cmake的全局变量
set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
# 添加头文件路径,相当于makefile里面的-I
include_directories(${PROJECT_SOURCE_DIR}/include)
# 设置库文件搜索路径
link_directories(${PROJECT_SOURCE_DIR}/lib)

# 设置可执行文件
add_executable(main main.cpp)
# 执行可执行文件需要依赖的库
target_link_libraries(main sum)

源文件和头文件的内容如下:
 

//sum.h头文件的内容
#ifndef SUM_H

int add(int a, int b);

#endif

//sum.cpp文件的内容:
#include "sum.h"

int add(int a, int b)
{
    return a + b;
}

//main.cpp文件的内容
#include <iostream>
#include "sum.h"

using namespace std;

int main()
{
    int sum = add(3, 5);
    cout << sum <<endl;
    return 0;
}

在build目录下执行cmake ..命令,然后执行make,如下:

user@ubuntu:~/CMakeTest$ cd build && cmake ..
user@ubuntu:~/CMakeTest/build$ make

执行成功之后,发现在 bin/ 目录下有生成的 main,lib/ 目录下有生成的 libsum.so

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值