CMake教程5:可执行程序调用lib

简介: CMake教程5:可执行程序调用lib

app调用lib

之前我们学到了如何书写一个可执行程序和Library,现在我们使用target_link_libraries把lib和app结合起来。

项目结构为:

  • main.cpp
  • lib.cpp
  • CMakeLists.txt
# app
cmake_minimum_required(VERSION 3.0.0) 
set(app "demo") 
project(${app} 
VERSION 0.1.0) 
add_executable(${app} main.cpp)
# lib
set(lib "my-lib") 
project(${lib}) 
add_library(${lib} ./lib.cpp)
# 将lib链接到app
target_link_libraries(${app} ${lib}) 
复制代码

需要注意的target_link_libraries

  • 第一个参数来自add_executable的第一个参数
  • 第二个参数来自add_library的第一个参数

项目结构优化

一般来说,lib和app是分离的,要引入lib的CMakeLists.txt,可以这么做:

  • 方式1
include(lib/CMakeLists.txt)
复制代码
  • 方式2
add_subdirectory(./lib )
复制代码

注意:如果lib目录不是app目录的子目录,必须指定第二个参数,也就是bin目录

两种方式的异同:

相同点:
  • 在上层的CMakeLists.txt中可以直接使用其中的变量。
区别:
  • include的scope还是上层的CMakeLists.txt
  • add_subdirectory的scope是当前CMakeLists.txt

也就是CMAKE_CURRENT_SOURCE_DIR发生了改变

include头文件目录问题

动态添加lib的CMakeLists.txt后,我们需要为app添加头文件目录

  • 方式1:在app的CMakeLists.txt中添加
include_directories("a/b/c/")
复制代码
  • 方式2:在lib项目中添加,只要有app使用到了这个lib,就会自动将这个目录添加到app的项目中
# 注意:要放在add_library后边
target_include_directories(${LIB_NAME} INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/)
复制代码

推荐使用第2种方式。

lib包含目录问题

如果项目中使用的预编译好的库文件,可以使用link_directoriestarget_link_directories,区别参考上文。



目录
相关文章
|
7月前
CMake基础(4)动态库
CMake基础(4)动态库
76 1
|
7月前
|
C语言 Windows
使用CMake调用Makefile 项目
使用CMake调用Makefile 项目
120 0
|
7月前
|
iOS开发 MacOS
CMake基础:CMake中的常用变量的命令
CMake基础:CMake中的常用变量的命令
79 0
|
iOS开发
CMake教程7:安装与编译
CMake教程7:安装与编译
418 0
|
IDE 开发工具
CMake教程3:最简单的CMake可执行程序
CMake教程3:最简单的CMake可执行程序
200 0
|
C++ Windows API
C++ 调用lib 和 dll的 方法 及 动态库DLL与静态库lib的区别
C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法     1  LIB文件直接加入到工程文件列表中   在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add Files to Project"菜单,在弹出的文件对话框中选中要加入DLL的LIB文件。
4638 0
|
Java Android开发 C++
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )(一)
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )(一)
218 0
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )(一)
|
Android开发 C++
【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )(一)
【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )(一)
338 0
【CMake】Android Studio 中使用 CMake 编译单个 C++ 源文件 ( 常用的 CMake 命令解析 )(一)
|
Java Android开发 C++
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( 测试 lib7zr.so 动态库调用 )
406 0
|
Java Android开发 C++
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )(二)
【Android 安装包优化】使用 lib7zr.so 动态库处理压缩文件 ( jni 中 main 函数声明 | 命令行处理 | jni 调用 lib7zr.so 函数库处理压缩文件完整代码 )(二)
191 0