[CMake Tutorial] Step2 总结


CMake学习的笔记, 原文链接.
本节介绍如何在工程中创建并使用一个库,同时学习如何使用库选项。

练习1 创建一个库

使用add_library()命令指定哪些源文件构成库。
对子目录中的文件,使用add_subdirectory命令添加。
使用target_include_directories()target_link_libraries()命令连接库和可执行文件。

目标

添加并使用库。

操作

首先,在子目录MathFunctions下的CMakeList.txt中使用add_library命令,添加一个库。

add_library(<name> [STATIC | SHARED | MODULE]
            [EXCLUDE_FROM_ALL]
            [<source>...])

然后,在根目录下的CMakeList.txt中使用add_sudirectory()命令,将子目录添加到工程;
使用target_link_libraries命令,将库与可执行文件连接;

target_link_libraries(<target> ... <item>... ...)

使用target_include_directories命令,为输出指定头文件搜索地址

target_include_directories(<target> [SYSTEM] [AFTER|BEFORE]
  <INTERFACE|PUBLIC|PRIVATE> [items1...]
  [<INTERFACE|PUBLIC|PRIVATE> [items2...] ...])

最后,在tutorial.cxx文件中使用MathFunctions

练习2 将库设置为可选

使用option()命令,让库可选。

目标

为库设置可选(是否添加)

操作

首先使用optinon命令在根目录下CMakeLists.txt中创建变量USE_MYMATH

option(<variable> "<help_text>" [value])

使用if命令根据USE_MYMATH变量控制状态,

if(<condition>)
  <commands>
elseif(<condition>) # optional block, can be repeated
  <commands>
else()              # optional block
  <commands>
endif()

使用list命令中的APPEDN创建并往列表中存入信息。

list(APPEND <list> [<element> ...])

if中,除了要包含需要构建的子目录,还要将用于链接的库和包含的库路径分别存入到list中。
然后,在源文件中使用变量USE_MYMATH控制是否将头文件添加到源文件中,以及使用的函数。

#ifdef USE_MYMATH
#  include "MathFunctions.h"
#endif
#ifdef USE_MYMATH
  const double outputValue = mysqrt(inputValue);
#else
  const double outputValue = sqrt(inputValue);
#endif

最后,在TutorialConfig.h.in中引入变量USE_MYMATH

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值