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,区别参考上文。



目录
相关文章
|
API Windows
NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版
原文:NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版 nsis中文版(Nullsoft Scriptable Install System)是一个专业的开源的可以用来封闭Windows程序的实用工具,是一个开源的 Windows 系统下安装程序制作程序。
4680 0
|
6月前
|
缓存 编译器 Shell
【实战指南】 CMake搭建编译环境总结
本文总结了使用CMake搭建编译环境的技巧,涵盖单个及多个源文件的编译、CMakeLists嵌套管理、变量设置、交叉编译配置、常用编译选项及警告处理等内容。通过实例说明了如何高效组织工程结构,并利用CMake灵活控制编译流程,适用于嵌入式开发场景。
907 38
|
运维 物联网 数据中心
|
SQL NoSQL 数据处理
深入探索MongoDB的聚合操作
【10月更文挑战第13天】
378 0
|
设计模式 Java 数据处理
【Java并发编程系列8】多线程实战
Java多线程的学习,也有大半个月了,从开始学习Java多线程时,就给自己定了一个小目标,希望能写一个多线程的Demo,今天主要是兑现这个小目标。
1247 0
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
289 0
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件
小功能⭐️Unity Button按钮实现鼠标移入移出触发相应事件
|
C++ 缓存 存储
面向 C++ 的现代 CMake 教程(一)(3)
面向 C++ 的现代 CMake 教程(一)
453 0
|
存储 前端开发 测试技术
面向 C++ 的现代 CMake 教程(三)(4)
面向 C++ 的现代 CMake 教程(三)
267 0
|
安全 API 数据安全/隐私保护
email api接口配置教程步骤详解
Email API是用于程序化访问邮件服务的工具,让开发者能集成邮件功能到应用中。配置Email API包括选择供应商(如SendGrid、Mailgun、AokSend),注册获取API密钥,配置API参数,及测试邮件发送。使用Email API能提升邮件发送的可靠性和效率,便于邮件管理及营销活动。AokSend支持大量验证码发送,适合高效邮件运营。