ZhiBing's blog(码上看世界) ZhiBing's blog(码上看世界)
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)

ZhiBing Zheng

时间会回答成长
首页
  • Linux工具链

    • shell命令
  • 构建

    • CMake
    • Makefile
  • 版本管理

    • Git
    • Github
  • IDE及工具

    • vscode
    • CLion
  • 设计模式

    • 设计原则
  • 编程语言

    • C++
    • Go
    • Python
    • Shell
  • 调试

    • gdb
  • 开发者测试

    • gtest
  • 系统支撑

    • 操作系统
  • 性能优化

    • 编译优化选项
    • perf
    • valgrind
  • 容器

    • Docker
  • 微服务

    • Rancher
  • 其他
  • 随笔
  • 友情链接
收藏
  • 分类
  • 标签
  • 归档
关于
GitHub (opens new window)
  • Linux工具链

  • 构建

    • CMake

      • CMake Day 1 —— 初识 CMake
      • CMake Day 2 —— 指定 C/C++的标准
      • CMake Day 3 —— 编译二进制或库
        • add_executable
        • add_library
      • CMake Day 4 —— 设置头文件路径和链接库
      • CMake Day 5 —— 从 CMakeLists.txt 传递变量到源文件
      • CMake Day 6 —— 安装规则(install rules)
      • CMake Day 7 —— option
      • CMake Day 8 —— 编译成一个库(利用OBJECT)
    • Makefile

  • 版本管理

  • IDE及工具

  • 基础领域
  • 构建
  • CMake
zhengzhibing
2022-06-10
目录

CMake Day 3 —— 编译二进制或库

# CMake Day 3 —— 编译二进制或库

我们可以通过add_executable命令来将项目编译成一个二进制文件,通过add_library将项目编译编译成一个库。

项目结构如下:

demo
​ ├── build
    ​ └── lib
    ​ └── bin
​ ├── CMakeLists.txt
​ ├── add.h
​ ├── add.cpp
​ └── main.cpp
1
2
3
4
5
6
7
8
# CMake的最小版本要求
cmake_minimum_required(VERSION 3.0.0)
# 项目名称以及版本号
project(demo VERSION 0.1.0)

#启动对C++14标准的支持
set(CMAKE_CXX_STANDARD 14)

# 显式要求指明支持C++标准
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 归档静态库到指定目录
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build/lib)
# 归档动态库到指定目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build/lib)
# 归档可执行文件到指定目录
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/build/bin)

#设置可执行程序
add_executable(demo main.cpp)

#设置动态库
add_library(add SHARED add.cpp)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# add_executable

语法:

add_executable(<name> [WIN32] [MACOSX_BUNDLE]
               [EXCLUDE_FROM_ALL]
               [source1] [source2 ...])
1
2
3

名为<name>的可执行文件将会从源文件列表中被构建,其中<name>需要在整个项目中全局唯一,构建出的的实际文件名是基于平台的约定构建的,例如:<name>.exe或者<name>。

默认情况下,可执行文件将会在该项目的构建树目录中被创建。可以通过CMAKE_RUNTIME_OUTPUT_DIRECTORY来改变可执行文件的归档路径。

  • CMAKE_RUNTIME_OUTPUT_DIRECTORY:是归档可执行文件到指定目录;

WIN32是指在 Windows 上使用 WinMain 入口点创建可执行文件。 MACOSX_BUNDLE是指在 macOS 或 IOS 上构建的可执行文件。

# add_library

语法:

add_library(&lt;name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [&lt;source>...])
1
2
3

名为<name>的库将会从源文件列表中被构建,其中<name>需要在整个项目中全局唯一,构建出的的实际文件名是基于平台的约定构建的,例如libdemo.a/libdemo.so或者demo.lib/demo.dll。

通过指定STATIC,SHARED,MODULE来指定要创建库的类型。STATIC是静态库,SHARED是动态库,MODULE是未链接到其它目标的插件,但可以使用dlopen等方式在运行期间被动态加载。

如果没有明确指定库的类型,可以通过BUILD_SHARED_LIBS的值是否为ON来指定库的类型是SHARED还是STATIC,注意:这个参数是全局标志,默认是OFF。

默认情况下,库文件将会在该项目的构建树目录中被创建,例如:项目中需要将不同文件夹中的代码编译成库,构建目录中会生成对于的构建树,库文件就在对应的目录中。但是我们可以通过CMAKE_ARCHIVE_OUTPUT_DIRECTORY,CMAKE_LIBRARY_OUTPUT_DIRECTORY参数来改变库文件生成的路径。

  • CMAKE_ARCHIVE_OUTPUT_DIRECTORY:是归档静态库到指定目录;
  • CMAKE_LIBRARY_OUTPUT_DIRECTORY: 是归档动态库到指定目录;
#CMake
上次更新: 2022/06/11, 08:32:44
CMake Day 2 —— 指定 C/C++的标准
CMake Day 4 —— 设置头文件路径和链接库

← CMake Day 2 —— 指定 C/C++的标准 CMake Day 4 —— 设置头文件路径和链接库→

最近更新
01
HPE gen10 plus 安装ESXI 7
06-12
02
ESXI 7安装黑群晖
06-12
03
ESXI 7安装win10
06-12
更多文章>
Theme by Vdoing | Copyright © 2022-2024 ZhBing Zheng | 粤ICP备2022062743号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式