CMake简单用法

静态库

编译生成静态库,目录结构如下:

learncmake
    static
        CMakeLists.txt
        static_math.h
        static_math.cpp

static_math.h

#pragma once

int mysqrt(int a);

static_math.cpp

#include "static_math.h"

int mysqrt(int a)
{
  return a * a;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(static_math)

aux_source_directory(. MAIN)
set(ALL ${MAIN})

add_library(static_math STATIC ${ALL})
  • cmake_minimum_required
    编译所需要的最低CMake版本

  • project
    工程名

  • aux_source_directory
    aux_source_directory(<dir> <variable>)
    收集目录中的所有源文件,将列表存储在变量中

  • set 设置变量

  • add_library 使用指定的源文件将库添加到项目中,注意中间的STATIC。

编译后生成libstatic_math.a静态库文件

动态库

编译生成动态库,目录结构如下:

learncmake
    share
        CMakeLists.txt
        share_math.h
        share_math.cpp

share_math.h

#pragma once

int myadd(int a, int b);

share_math.cpp

#include "share_math.h"

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

CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
project(share_math)

aux_source_directory(. MAIN)
SET(ALL ${MAIN})

add_library(share_math SHARED ${MAIN})

与编译静态库差不多,只是将add_library中的STATIC改为SHARED。

可执行程序

生成可执行程序,使用静态库和动态库
目录如下:

learncmake
    main
        3rd
            share_math
                include
                    share_math.h
                lib
                    libshare_math.so
            static_math
                include
                    static_math.h
                lib
                    libstatic_math.a
        bld
        include
            student.h
        src
            common
                common.h
                common.cpp
            model
                bond.h
                bond.cpp
            main.cpp
            student.cpp
        CMakeLists.txt

如上目录,能覆盖基本的CMake使用

CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 2.8)
project(test)

# 添加头文件目录
include_directories(
    include 
    ${CMAKE_CURRENT_SOURCE_DIR}/3rd/static_math/include
    ${CMAKE_CURRENT_SOURCE_DIR}/3rd/share_math/include
)

# 添加第三方库lib目录
link_directories(
    ${CMAKE_CURRENT_SOURCE_DIR}/3rd/static_math/lib
    ${CMAKE_CURRENT_SOURCE_DIR}/3rd/share_math/lib
)


aux_source_directory(src SRC_DIR)
aux_source_directory(src/common COMMON_DIR)
aux_source_directory(src/model MODEL_DIR)

set(ALL 
    ${SRC_DIR} 
    ${COMMON_DIR}
    ${MODEL_DIR}
)

add_executable(test ${ALL})

# 链接第三方库
target_link_libraries(test libstatic_math.a)
target_link_libraries(test libshare_math.so)

在bld目录中编译

发表评论

电子邮件地址不会被公开。 必填项已用*标注