CMake教程5:最简单的Static Library

220 阅读1分钟

这一节教程就非常轻松了,要生成Library,只需要调用add_library即可

  • lib.cpp
void add(int a, int b){
    return a + b;
}
  • lib.h
void add(int a, int b);
  • CMakeLists.txt
set(lib "lib")
project(${lib})
add_library(${lib} ./lib.cpp ./lib.h)

生成的对应ide工程结构如下:

image.png

查看属性,发现项目配置类型的确是一个lib

image.png

如果你仔细观察输出目录,你会发现它是一个绝对路径,如果你对vs非常了解,一般这种路径,大家都会默认使用vs提供的宏变量,这样有一个好处,就是你把项目复制给别人,避免了绝对路径不一致的问题,那么为什么cmake生成的IDE项目不也使用宏变量呢?

原因是我们只需要CMakeLists.txt加入版本控制就能生成应用程序,IDE项目只是提供了一种可视化,因为IDE项目我们是不需要纳入版本管理的,所以也就没有必要使用宏了。

无论是通过ide编译项目,还是使用cmake命令行编译项目(后续教程有详细介绍),都能生成lib.lib文件,就是这么简单。

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

当然add_library还能生成动态库,在本章节,并不想展开讲解。

大部分的项目都离不开动态库、静态库,而且lib也区分debug/release版本,添加编译选项,依赖项目还需要添加lib search path、lib head search path,让ide项目结构更加工程化,最后发布应用程序的时候,copy动态库到运行目录,等等类似的需求,cmake都能支持,在以后的教程中会逐步深入介绍,一大波干货即将到来,没有上车的抓紧了。