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