cmake学习笔记之add_library、target_link_libraries和l。。。cmake是Linux(这⾥默认是Ubuntu系统)下常使⽤的编译C++的⼯具,⽽使⽤cmake就需要先在⽂件中对编译规则进⾏。这
⾥介绍常⽤的三种指令add_library、target_link_libraries和link_directories,该笔记主要参考了cmake官⽹给的教程,如有需要请访问以下⽹址:
/cmake/help/v3.1/
1. add_library
cmake如何使用该指令的主要作⽤就是将指定的源⽂件⽣成链接⽂件,然后添加到⼯程中去。该指令常⽤的语法如下:
add_library(<name> [STATIC | SHARED | MODULE]
[EXCLUDE_FROM_ALL]
[source1] [source2] [...])
其中<name>表⽰库⽂件的名字,该库⽂件会根据命令⾥列出的源⽂件来创建。⽽STATIC、SHARED和MODULE的作⽤是指定⽣成的库⽂件的类型。STATIC库是⽬标⽂件的归档⽂件,在链接其它⽬标的时候
使⽤。SHARED库会被动态链接(动态链接库),在运⾏时会被加载。MODULE库是⼀种不会被链接到其它⽬标中的插件,但是可能会在运⾏时使⽤dlopen-系列的函数。默认状态下,库⽂件将会在于源⽂件⽬录树的构建⽬录树的位置被创建,该命令也会在这⾥被调⽤。
⽽语法中的source1 source2分别表⽰各个源⽂件。
例⼦:
2. link_directories
该指令的作⽤主要是指定要链接的库⽂件的路径,该指令有时候不⼀定需要。因为find_package和find_library指令可以得到库⽂件的绝对路径。不过你⾃⼰写的动态库⽂件放在⾃⼰新建的⽬录下时,可以⽤该指令指定该⽬录的路径以便⼯程能够到。
例⼦如下:
link_directories(
lib
)
3. target_link_libraries
该指令的作⽤为将⽬标⽂件与库⽂件进⾏链接。该指令的语法如下:
target_link_libraries(<target> [item1] [item2] [...]
[[debug|optimized|general] <item>] ...)
上述指令中的<target>是指通过add_executable()和add_library()指令⽣成已经创建的⽬标⽂件。⽽[item]表⽰库⽂件没有后缀的名字。默认情况下,库依赖项是传递的。当这个⽬标链接到另⼀个⽬标时,链接到这个⽬标的库也会出现在另⼀个⽬标的连接线上。这个传递的接⼝存储在interface_link_libraries的⽬标属性中,可以通过设置该属性直接重写传递接⼝。
例⼦如下: