Modern Cmake的基本使用方法

 

如何在管理项目时更多的使用modern cmake,更具有规范性

modern cmake中文网站

常用库的一些使用案例

Cmake如何构建项目

cmake -S . -B build
cmake --build build

Cmake如何安装

From the build directory (pick one)
make install
cmake --build . --target install
cmake --install . # CMake 3.15+ only
From the source directory (pick one)
make -C build install
cmake --build build --target install
cmake --install build # CMake 3.15+ only

Cmake标准选项

大部分软件包中都会用到以下的 CMake 选项:

-DCMAKE_BUILD_TYPE= 从 Release, RelWithDebInfo, Debug, 或者可能存在的更多参数中选择。 -DCMAKE_INSTALL_PREFIX= 这是安装位置。UNIX 系统默认的位置是 /usr/local,用户目录是 ~/.local,也可以是你自己指定的文件夹。 -DBUILD_SHARED_LIBS= 你可以把这里设置为 ON 或 OFF 来控制共享库的默认值(不过,你也可以明确选择其他值而不是默认值) -DBUILD_TESTING= 这是启用测试的通用名称,当然不会所有软件包都会使用它,有时这样做确实不错。

Cmake应注意行为

  • 不要使用具有全局作用域的函数
  • 不要添加非必要的 PUBLIC 要求
  • 不要在file函数中添加 GLOB 文件
  • 将库直接链接到需要构建的目标上
  • 当链接库文件时,不要省略 PUBLIC 或 PRIVATE 关键字

Cmake流程

设置一个项目

project(MyProject VERSION 1.0
                  DESCRIPTION "Very nice project"
                  LANGUAGES CXX)

生成一个可执行文件

add_executable(one two.cpp three.h)

生成一个库

add_library(one STATIC two.cpp three.h)

目标时常伴随着你

target_include_directories(one PUBLIC include)

PUBLIC 对于一个二进制目标没有什么含义;但对于库来说,它让 CMake 知道,任何链接到这个目标的目标也必须包含这个目录。其他选项还有 PRIVATE(只影响当前目标,不影响依赖),以及 INTERFACE(只影响依赖)。

add_library(another STATIC another.cpp another.h)
target_link_libraries(another PUBLIC one)

another会去寻找one库。


target_link_directories(subtraction PUBLIC /public/dir INTERFACE /interface/dir)

subtraction会去指定的相对路径或者绝对路径去找想要链接的库文件。